2010-12-11 157 views
1

我想它来检测FILE_1以下模式的sed:使用正则表达式

STRING_1 : "STRING_2" 

并追加STRING_2至FILE_2

这就是我现在所拥有的:

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

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

+2

你可以给出一个输入例子,它失败了吗? – codaddict 2010-12-11 02:45:58

回答

1

有点冒险回答改变问题规范,但...

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

似乎做工精细

1

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

为了解决这个问题,在开始和你目前的图案的末尾添加.*

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

这意味着你的正则表达式不起作用。给我们一些你输入的样本。 – codaddict 2010-12-11 03:31:48

0

将其改为:

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

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

0

使用sed -n如果你不想sed输出都默认为每一行和p修改打印匹配的结果。

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