[英]Using sed to replace string matching regex with wildcards
我正在尝试使用sed操作的字符串
js/plex.js?hash=f1c2b98&version=2.4.23"
所需的输出是
js/plex.js"
这是我目前正在尝试的
sed -i s'/js\/plex.js[\?.\+\"]/js\/plex.js"/'
但这只匹配第一个吗? 并返回此输出
js/plex.js"hash=f1c2b98&version=2.4.23"
几个小时后我看不到为什么不起作用
这有效
echo 'js/plex.js?hash=f1c2b98&version=2.4.23"' | sed s:.js?.*:.js:g
使用原始正则表达式:
首先,我建议使用不同的定界符(例如:
在正则表达式中使用/时在sed中使用。) []
的使用意味着您要匹配方括号内的字符 (因此,不会将.+
扩展为行的结尾-您可以尝试将+
放在[]
后面)
也许
sed 's#\(js/plex.js?\)[^"]\+".*#\1#g'
..
\# is used as a delimiter
\\(js/plex.js?\\)[^"]\\+".*
#找到此模式并将所有内容替换为标记的模式\\1
标记图案
在sed中,您可以使用\\( \\)
标记模式的一部分或购买整个模式。 。
当图案的一部分用方括号()
括起来时,用反斜杠转义..该图案被标记/存储...
在我的示例中,这是我的模式, 没有标记
js/plex.js?[^"]\+".*
但我只想让sed记住js/plex.js?
并只用这种模式js/plex.js?
替换整行js/plex.js?
..sed的第一个标记图案称为\\1
,第二个标记图案\\2
依此类推
\(js/plex.js?\) ---> is marked as \1
因此我将整个行替换为\\1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.