【问题标题】:How to globally replace strings in lines NOT starting with a certain pattern如何全局替换不以特定模式开头的行中的字符串
【发布时间】:2011-02-10 05:34:31
【问题描述】:

我想使用 sed 将字符串 foo 全局替换为字符串 bar。这只适用于不以字符串 ##Input 开头的行。

我无法让它工作。我尝试过这样的事情,但到了我不确定自己是否知道自己在做什么的地步:

sed -i '/^##Input/ s/foo/bar/g' myfile

请帮忙!

【问题讨论】:

    标签: sed


    【解决方案1】:

    您只需要使用! 否定匹配:

    sed -i '/^##Input/! s/foo/bar/g' myfile
    

    【讨论】:

    • 这太有用了!我没有意识到您可以在该行上运行搜索和替换之前为 sed 提供与该行匹配的输入。这对我帮助很大!
    • @bballdave025:请参阅 GNU sed 手册的 addresses 部分以了解更多信息。
    【解决方案2】:

    你必须像\#一样逃脱#。

    【讨论】:

    • 没有必要转义#。对sed没有特殊意义。
    【解决方案3】:

    一个丑陋的请求的一个丑陋的答案(即他们得到了他们所要求的):

    echo \{
    for file in *.json; do
        sed -n '/^[\{\}]/! s/\([^\,]\)$/\1,/; /^[\{\}]/!p' $file
    done
    echo \{
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多