繁体   English   中英

使用sed将字符串匹配的正则表达式替换为通配符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM