【发布时间】:2011-07-02 16:01:25
【问题描述】:
如何使用 SED 更改以下输入行?
输入 - bus_ln in ('abc');
必需的 O/P - bus_ln in ('def','xyz');
【问题讨论】:
如何使用 SED 更改以下输入行?
输入 - bus_ln in ('abc');
必需的 O/P - bus_ln in ('def','xyz');
【问题讨论】:
试试这个:
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
【讨论】:
使用 sed 替换命令:
echo "bus_ln in ('abc');" | sed "s/bus_ln in ('abc');/bus_ln in ('def','xyz');/"
【讨论】:
$ echo "Input - bus_ln in ('abc');" | ruby -e 'print gets.gsub(/(.*\()(.[^;]*)(\);)/,"\\1\047def\047,\047xyz\047\\3")'
Input - bus_ln in ('def','xyz');
【讨论】:
这可能对你有用:
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');
其中'\'' 代表单个','\',\'' 代表','
【讨论】: