Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 结合正则表达式使用sed_Regex_Linux_Bash_Sed - Fatal编程技术网

Regex 结合正则表达式使用sed

Regex 结合正则表达式使用sed,regex,linux,bash,sed,Regex,Linux,Bash,Sed,我希望它检测文件_1中的以下模式: STRING_1 : "STRING_2" 并将字符串_2附加到文件_2 这就是我现在拥有的: sed 's/STRING_1\s*:\s*"\([^"]*\)"/\1/g' FILE_1 >> FILE_2; 但这不起作用,它在文件2中添加了很多随机内容(不应该匹配)。不确定我做错了什么…如果在字符串\u 1之前和字符串\u 2之后有文本,它将不会与当前正则表达式一起删除,因此将附加到文件\u 2 要修复此问题,请在当前模式的开头和结

我希望它检测文件_1中的以下模式:

STRING_1   :   "STRING_2"
并将字符串_2附加到文件_2

这就是我现在拥有的:

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

但这不起作用,它在文件2中添加了很多随机内容(不应该匹配)。不确定我做错了什么…

如果在
字符串\u 1
之前和
字符串\u 2
之后有文本,它将不会与当前正则表达式一起删除,因此将附加到
文件\u 2

要修复此问题,请在当前模式的开头和结尾添加
*
,如下所示:

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

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

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

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

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

如果不希望默认情况下
sed
输出每一行,请使用
sed-n
,并使用
p
修改器打印匹配结果

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

你能举一个输入失败的例子吗?这意味着你的正则表达式不能工作。给我们一些你输入的样本行。