带有特殊字符的SED字符串,通过通配符分割。

4

我有一个关于sed的问题。我的sed命令如下:

sed -i '' 's#\<script src\=\"http\:\/\/widget\.blah\.com\/js\/sis_some_widget.*.class\=\"sis\-some\-widget\"\>\<\/div\>#newblah.com#g' lol.sql . 

这段代码需要用通配符替换两部分之间的全部脚本代码。问题在于,每个脚本代码的通配符部分都不同(在许多WordPress页面上)。唯一相同的部分是<script src="http://widget.blah.com/js/sis_some_widget.js?class="sis-some-widget"></div>

请帮我找出为什么这个sed命令不起作用,以及我应该如何使用sed处理带有通配符和许多特殊字符的字符串。

代码如下:

<script src="http://widget.blah.com/js/sis_some_widget.js?MANY MANY SPECIAL CHARACTERS and letters class="sis-some-widget"></div>


1
请使用另一个分隔符来提高可见性:sed 's#bla/ble#aa#' - fedorqui
1
完成,谢谢伙计。 - harcotlupus
这样做的好处是您不再需要转义 /,而可以直接写 /。也就是说,下面两种写法是等效的:sed 's/a\/b/X\/Y/'sed 's#a/b#X/Y#' - fedorqui
看看这个能否帮到你:链接 - Thomas Kühn
1个回答

1
您正在不必要的地方添加反斜杠。如果您使用'#'作为分隔符,那么您只需要转义域名中的点即可。
'\<', '\=', '-'等不是有效的字符转义,因此sed将这些反斜杠解释为字面字符。
您的表达式应该是:
's#<script src="http://widget\.blah\.com/js/sis_some_widget.*class="sis-some-widget"></div>#newblah.com#g'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接