【问题标题】:Using Sed to replace a string with another string?使用 Sed 将一个字符串替换为另一个字符串?
【发布时间】:2011-12-21 15:00:11
【问题描述】:

我试过这个:

sed -i 's/'Twas/It certainly was/g' *.txt

有什么建议吗??

【问题讨论】:

  • 我想我知道出了什么问题,但是在以后问这样的问题时,请描述发生了什么,以及您预期会发生什么。这使人们更容易弄清楚发生了什么。

标签: unix command-line sed


【解决方案1】:

使用双引号

sed -i "s/'Twas/肯定是/g" *.txt

【讨论】:

    【解决方案2】:

    'Twas 中的撇号被解释为右引号(由 shell,而不是 sed),然后/g 之后的后续单引号被解释为 open 引号,它愉快地一直吞噬到脚本的末尾(或命令提示符,然后你会得到神秘的>,这意味着 shell 认为还有更多的东西要来)。对于这种情况,

    sed -i "s/'Twas/It certainly was/g" *.txt
    

    应该有效;然而,shell 双引号字符串做了很多你通常不希望使用 sed 程序的事情。如果那里有任何正则表达式元字符,我会这样做

    sed -i 's/'\''Twas/It certainly was/g' *.txt
    

    【讨论】:

    • 哦,好吧,如果我想用“a”或“A”更改“the”或“The”怎么样(保留原件的大写)?如果这是有道理的......
    • sed 无法轻松做到这一点,因为它不支持单词边界匹配。但是perl -pi~ -e 's/\bthe\b/a/g; s/\bThe\b/A/g' 会这样做。我不知道用一个正则表达式进行两种替换的任何聪明方法,但也许其他人会这样做。
    • 好吧,我发另一个帖子,但我的意思是我可能只使用 perl,感谢所有帮助:)
    【解决方案3】:

    尝试使用以下

    grep -rl "旧字符串" 目录路径 | xargs sed -i 's/oldString/new String/g'

    例子:

    grep -rl 10.113.1.115 匹配目录 | xargs sed -i 's/10.113.1.115/10.113.1.65/g'

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 2020-01-12
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2015-01-17
      • 1970-01-01
      相关资源
      最近更新 更多