【问题标题】:sed to replace same patterns that have slightly different ending to the stringsed 替换字符串结尾略有不同的相同模式
【发布时间】:2016-07-18 21:00:42
【问题描述】:

我在整个目录上使用 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 接收正确的替换?

【问题讨论】:

    标签: linux awk sed


    【解决方案1】:

    首先,您可以轻松限制匹配,其次您需要一个映射以将旧文件名提供给新文件名,否则脚本将如何知道“file.swf”将被替换为“ player.swf”。

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 2015-06-18
      相关资源
      最近更新 更多