使用正则表达式的sed

时间:2010-12-11 02:37:14

标签: regex linux bash sed

我希望它在FILE_1中检测以下模式:

STRING_1   :   "STRING_2"

并将STRING_2附加到FILE_2

这就是我现在所拥有的:

sed 's/STRING_1\s*:\s*"\([^"]*\)"/\1/g' FILE_1 >> FILE_2;

但这不起作用,它会向FILE_2添加大量随机内容(不应该匹配)。不知道我做错了什么......

4 个答案:

答案 0 :(得分:1)

如果STRING_1之前和STRING_2之后有文字,则不会删除当前的正则表达式,因此会附加到FILE_2

要解决此问题,请在当前模式的开头和结尾添加.*

sed 's/.*STRING_1\s*:\s*"\([^"]*\)".*/\1/g' FILE_1 >> FILE_2;
       ^^                          ^^

答案 1 :(得分:1)

通过更改问题规范来回答一点风险,但......

perl -ne 'print "$1\n" if ( /.*STRING_1\s*:\s*\"([^"]*)\".*/)' FILE_1 >> FILE_2

似乎工作正常

答案 2 :(得分:0)

将其更改为:

sed 's/.*STRING_1\s*:\s*"\([^"]*\)".*/\1/g' FILE_1 >> FILE_2;         

但它仍然附加整个文件而不是正则表达式匹配

答案 3 :(得分:0)

如果您不希望sed -n默认输出每一行,并使用sed修饰符打印匹配结果,请使用p

sed -n -e 's/foo/bar/gp' FILE_1 >> FILE_2