【问题标题】:Replace a word with another in bash在bash中用另一个词替换一个词
【发布时间】:2012-02-26 20:47:56
【问题描述】:

我想更改文本中与 bourne shell 中的某个单词匹配的所有单词。例如:

hello sara, my name is sara too.

变成:

hello mary, my name is mary too.

谁能帮帮我?
我知道 grep 会找到相似的词,但我想用其他词替换它们。

【问题讨论】:

    标签: linux bash terminal sh


    【解决方案1】:

    纯 bash 方式:

    before='hello sara , my name is sara too .'
    after="${before//sara/mary}"
    echo "$after"
    

    或者使用 sed:

    after=$(sed 's/sara/mary/g' <<< "$before")
    echo "$after"
    

    输出:

    hello mary , my name is mary too .
    

    【讨论】:

    • 输入字符串最好命名为s 以外的其他名称,以避免${s//sara/mary}'s/sara/mary/g' 混淆。
    • 谢谢,这解决了我的问题,但是如果 $after 没有定义,你怎么能在 sed 语法中打印它呢?
    • 使用after=$(sed 's/sara/mary/g' &lt;&lt;&lt; "$before")
    【解决方案2】:

    您可以为此使用sed

    $ sed s/sara/mary/g <<< 'hello sara , my name is sara too .'
    hello mary , my name is mary too .
    

    或者如果您想就地更改文件:

    $ cat FILE
    hello sara , my name is sara too .
    $ sed -i s/sara/mary/g FILE
    $ cat FILE
    hello mary , my name is mary too .
    

    【讨论】:

      【解决方案3】:

      你可以使用 sed:

      # sed 's/sara/mary/g' FILENAME
      

      将输出结果。 s/// 构造意味着使用正则表达式进行搜索和替换。末尾的“g”表示“每个实例”(不仅仅是第一个)。

      您也可以使用 perl 并就地编辑文件:

      # perl -p -i -e 's/sara/mary/g;' FILENAME
      

      【讨论】:

      • sed 也可以进行就地修改。
      【解决方案4】:

      awk

      awk '{gsub("sara","mary")}1' <<< "hello sara, my name is sara too."
      

      【讨论】:

        猜你喜欢
        • 2019-09-24
        • 1970-01-01
        • 1970-01-01
        • 2015-03-02
        • 2021-10-02
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多