【问题标题】:replace pattern in text file替换文本文件中的模式
【发布时间】:2011-12-05 20:06:58
【问题描述】:

在我的示例 html 文件下方:

some text here <img src="http://site.com/7b399e20/77165/5fa/2a31ffb8.jpg"/> sometext here

some text here <img src="http://site.com/7b399e20/2a31ffb8.jpg"/> sometext here

some text here <img src="http://site.com/7b399e20/2a31ffb8.png"/> sometext here

some text here <img src="http://site.com/2a31ffb8.jpeg"/> sometext here

我该如何进行这样的转变:

some text here <img src="web/2a31ffb8.jpg"/> sometext here

some text here <img src="web/2a31ffb8.jpg"/> sometext here

some text here <img src="web/2a31ffb8.png"/> sometext here

some text here <img src="web/2a31ffb8.jpeg"/> sometext here

谢谢

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    我将使用 Perl,因为我知道语法而无需查找它,但它在 awk 或 sed 中会非常相似,正如 tekknolagi 所说:

    perl -pi -e 's|http://site.com/.*([^/]+)"/>|web/$1"/>|;'  <filename>
    

    这将保留最后一个 / 和 "

    之间的所有内容

    【讨论】:

    • 当关闭img src="..." 部分后有" 字符时,它将失败,因为这个正则表达式可能是贪婪的。
    • +1。 Perl 是解决这类问题的方法,尽管您的正则表达式也会处理文件中的其他 URL,这可能是不希望的。
    • @ZsoltBotykai:是的。我已经编辑了脚本以使其更加挑剔。
    • @ColinFine 还是不行。它将匹配整个字符串(例如):http://site.com/valamisemmi.jpg" akarmi " barmi " semmi "
    • @ZsoltBotykai: 不,只有在 " 后面紧跟 />
    【解决方案2】:
    sed -i 's:\(img src="\).*\(/[^"/]\+\.[^"]\+"\):\1web\2:' INPUTFILE
    

    可能会在原地完成。

    HTH

    【讨论】:

      【解决方案3】:

      使用 perl 脚本怎么样?我已将您的示例文本放入文件 foo.txt,结果如下:

      $ cat foo.txt | perl -pe 's#http://.*/([a-z0-9A-Z]*\.)#web/\1#'
      some text here <img src="web/2a31ffb8.jpg"/> sometext here
      some text here <img src="web/2a31ffb8.jpg"/> sometext here
      some text here <img src="web/2a31ffb8.png"/> sometext here
      some text here <img src="web/2a31ffb8.jpeg"/> sometext here
      

      【讨论】:

      • 如果有更多非img 相关链接在线(贪婪的正则表达式),将无法正常工作。
      猜你喜欢
      • 2013-06-26
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2023-03-12
      • 2019-10-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多