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

时间:2011-02-23 10:44:56

标签: unix sed

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

输入 - ('abc')中的bus_ln;

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用sed substitute命令:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这可能对您有用:

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

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

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

'\''代表单个''\',\''代表','