【问题标题】:How do i change the following input line using SED?如何使用 SED 更改以下输入行?
【发布时间】:2011-07-02 16:01:25
【问题描述】:

如何使用 SED 更改以下输入行?

输入 - bus_ln in ('abc');

必需的 O/P - bus_ln in ('def','xyz');

【问题讨论】:

    标签: unix sed


    【解决方案1】:

    试试这个:

    sed "s/\([^(]*\)('[^']*')/\1('def','xyz')/" inputfile
    

    它将替换括号之间的任何内容。

    输入:

    bus_ln in ('abc');
    foo('bar');
    baz aaa bbb ('ccc ddd') some more text
    

    输出:

    bus_ln in ('def','xyz');
    foo('def','xyz');
    baz aaa bbb ('def','xyz') some more text
    

    【讨论】:

      【解决方案2】:

      使用 sed 替换命令:

      echo "bus_ln in ('abc');" | sed "s/bus_ln in ('abc');/bus_ln in ('def','xyz');/"
      

      【讨论】:

        【解决方案3】:
        $ echo "Input - bus_ln in ('abc');" | ruby -e 'print gets.gsub(/(.*\()(.[^;]*)(\);)/,"\\1\047def\047,\047xyz\047\\3")'
        Input - bus_ln in ('def','xyz');
        

        【讨论】:

          【解决方案4】:

          这可能对你有用:

          echo "bus_ln in ('abc');" | sed "s/'.*'/'def','xyz'/"
          bus_ln in ('def','xyz');
          

          这使用"'s 来包围 sed 命令,这有时可能会导致意外结果。 使用 ' 代替是笨拙的(相比之下)但更可预测:

          echo "bus_ln in ('abc');" | sed 's/'\''.*'\''/'\''def'\',\''xyz'\''/'
          bus_ln in ('def','xyz');
          

          其中'\'' 代表单个''\',\'' 代表','

          【讨论】:

            猜你喜欢
            • 2020-03-28
            • 2014-05-03
            • 1970-01-01
            • 1970-01-01
            • 2015-05-18
            • 1970-01-01
            • 1970-01-01
            • 2014-11-01
            • 2021-06-02
            相关资源
            最近更新 更多