sed替换与字符串结尾略有不同的相同模式

时间:2016-07-18 21:00:42

标签: linux awk sed

我在整个目录上使用grep并使用sed来替换字符串。替换中存在一些冲突,因为有两个非常相似且具有相同模式的字符串。最大的区别是文件扩展名。

字符串1

  

xargs sed -i   ' S,// website.net/resources/special.js,// newsite.net/location/newspecial.js,g'

String2的

  

xargs sed -i   ' S,// website.net/resources/file.swf,// newsite.net/location/player.swf,g'

如何指定.js收到正确的替换,并且.swf收到正确的替换?

1 个答案:

答案 0 :(得分:0)

对于第一个,您可以轻松地限制匹配,对于第二个,您需要映射以将旧文件名提供给新文件名,否则脚本将如何知道" file.swf"将被替换为" player.swf"。

$ echo '//website.net/resources/special.js' | 
  sed -r 's,(.*/)(.*.js)$,\1new\2,'

//website.net/resources/newspecial.js

第一个匹配组将包括每个字符,直到最后/。,第二个匹配以.js结尾的内容,如果同一行上有多个元素,则可能需要另一个锚点。请注意,在一个元素中,g是不必要的。