我在整个目录上使用 grep 并使用 sed 来替换字符串。替换中存在一些冲突,因为有两个非常相似且具有相同模式的字符串。唯一的区别是末尾的文件扩展名。
字符串 1
xargs sed -i 's,//website.net/resources/special.js,//newsite.net/location/newspecial.js,g'
字符串 2
xargs sed -i 's,//website.net/resources/file.swf,//newsite.net/location/player.swf,g'
如何指定 .js 接收正确的替换而 .swf 接收正确的替换?
最佳答案
首先,您可以轻松地限制匹配,其次,您需要一个映射来提供旧文件名到新文件名,否则脚本将如何知道“file.swf”被替换为“播放器.swf”。
$ echo '//website.net/resources/special.js' |
sed -r 's,(.*/)(.*.js)$,\1new\2,'
//website.net/resources/newspecial.js
第一个匹配组将包含每个字符,直到最后一个 /
.,第二个匹配以 .js
结尾的内容,如果有多个元素,您可能需要另一个 anchor 同一条线。请注意,在一个元素的情况下,g
是不必要的。
关于linux - sed 替换字符串结尾略有不同的相同模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38445915/