我希望它在FILE_1中检测以下模式:
STRING_1 : "STRING_2"
并将STRING_2附加到FILE_2
这就是我现在所拥有的:
sed 's/STRING_1\s*:\s*"\([^"]*\)"/\1/g' FILE_1 >> FILE_2;
但这不起作用,它会向FILE_2添加大量随机内容(不应该匹配)。不知道我做错了什么......
答案 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