有没有办法在grep(-o标志)中只显示字符串的匹配部分,也就是说,显示除了匹配正则表达式的部分之外的所有内容?
也就是说,-v标志不是答案,因为它根本不显示包含匹配的文件,但是我想显示这些行,但不显示匹配的行的部分。
编辑:我想在sed上使用grep,因为它可以在多行上执行“仅匹配”匹配,具有:
cat file.xml|grep -Pzo "<starttag>.*?(\n.*?)+.*?</starttag>"
答案 0 :(得分:4)
这是一个相当不寻常的要求,我认为grep
不会像这样替换字符串。您可以使用sed
实现此目的:
sed -n 's/$PATTERN//gp' file
编辑以响应OP的编辑:
如果文件小到足以将其全部加载到内存中,您也可以与sed
进行多行匹配:
sed -rn ':r;$!{N;br};s/<starttag>.*?(\n.*?)+.*?<\/starttag>//gp' file.xml
答案 1 :(得分:1)
我认为grep中没有办法。
如果你使用ack,你可以输出Perl的特殊变量$`和$'变量来分别显示匹配前后的所有内容:
ack string --output="\$`\$'"
同样,如果您想输出与其他文字匹配的内容,您可以使用$&amp;其中包含匹配的字符串;
ack string --output="Matched: $&"
答案 2 :(得分:1)
您可以在sed
:
grep "pattern" input_file | sed 's/pattern//g'