Regex 结合正则表达式使用sed
我希望它检测文件_1中的以下模式: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 要修复此问题,请在当前模式的开头和结
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
你能举一个输入失败的例子吗?这意味着你的正则表达式不能工作。给我们一些你输入的样本行。