【问题标题】:sed wildcard substitutionsed 通配符替换
【发布时间】:2011-09-09 15:51:27
【问题描述】:

我想根据通配符进行替换。例如,仅当单词“tenure”出现在“=”符号之后时,才将所有“tenure”更改为“disposition”。基本上是一个匹配这个=.*tenure的正则表达式@

为此我拥有的 sed 命令是:

sed 's/=.*tenure/=.*disposition/g' file.txt

但是,如果我将其传递给包含以下内容的文件:

blah blah blah = change "tenure" to "disposition"

我明白了

blah blah blah =.*disposition" to "disposition"

代替:

blah blah blah = change "disposition" to "disposition"

如何进行替换以使正则表达式中的通配符不会成为目标文件的一部分?

【问题讨论】:

    标签: regex sed grep wildcard string-substitution


    【解决方案1】:

    您需要使用捕获组来捕获出现在等号和“tenure”之间的文本。

    所以

    sed 's/=\(.*\)tenure/=\1disposition/g'
    

    注意使用\1 来引用和使用您捕获的组。

    所以在

    echo 'blah blah blah = change "tenure" to "disposition"' | sed 's/=\(.*\)tenure/=\1disposition/g'
    

    我们得到

    blah blah blah = change "disposition" to "disposition".
    

    Regex grouping

    【讨论】:

      【解决方案2】:
      sed 's/\(=.*\)tenure/\1disposition/g' file.txt
      

      【讨论】:

        【解决方案3】:

        您需要在=tenure 之间保存匹配的字符以将它们添加到输出中:

        sed 's/=(.*)tenure/=\1disposition/g' file.txt
        

        此外,如果您想就地编辑文件(对文件本身进行修改),则应将 -i 选项添加到 sed。

        【讨论】:

          【解决方案4】:

          你必须在 sed 中使用backreference。像这样使用它:

          sed 's/\(=.*\)tenure/\1disposition/g'
          

          【讨论】:

            猜你喜欢
            • 2011-08-16
            • 1970-01-01
            • 2020-06-24
            • 1970-01-01
            • 1970-01-01
            • 2017-03-20
            • 2014-10-28
            • 2019-09-28
            相关资源
            最近更新 更多