【问题标题】:How to use sed to replace multiple chars in a string?如何使用 sed 替换字符串中的多个字符?
【发布时间】:2016-06-07 10:22:06
【问题描述】:

我想用 sed 替换字符串的一些字符。

我尝试了以下两种方法,但我需要知道是否有更优雅的形式来获得相同的结果,而不使用管道或 -e 选项:

sed 's#a#A#g' test.txt | sed 's#l#23#g' > test2.txt
sed -e 's#a#A#g' -e 's#l#23#g' test.txt > test2.txt

【问题讨论】:

    标签: linux sed


    【解决方案1】:

    当你有很多要替换的字符串时,你可以将它们收集到一个变量中。

    seds="s/a/A/;"
    seds+="s/1/23/;"
    echo "That was 1 big party" |
       sed ${seds}
    

    【讨论】:

      【解决方案2】:

      除了 Barmar 的回答之外,您可能还想使用正则表达式字符类来执行几个字符到一个特定字符的替换。

      这是一个澄清事情的例子,尝试在有和没有sed的情况下运行它来感受效果

      echo -e 'abc\ndef\nghi\nklm' | sed 's/[adgk]/1/g; s/[behl]/2/g; s/[cfim]/3/g'

      附:永远不要在安全沙箱之外运行来自陌生人的示例代码

      【讨论】:

      • + 为您的 P.S. ...我要补充一点:永远不要在不了解您在做什么的情况下运行示例代码:D
      【解决方案3】:

      您可以在单个参数中使用; 分隔命令,而不是多个-e 选项。

      sed 's/a/A/g; s/1/23/g' test.txt > test2.txt
      

      如果您正在寻找一种在单个命令中进行多次替换的方法,我认为没有办法。如果它们都是单字符替换,您可以使用类似y/abc/123 的命令,它将a 替换为1,将b 替换为2,将c 替换为3。但没有多字符版本。

      【讨论】:

      • 感谢 Barmar 的支持,这是获得相同结果的最佳方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多