与grep中的“only-matching”相反?

时间:2012-12-05 21:54:44

标签: grep

有没有办法在grep(-o标志)中只显示字符串的匹配部分,也就是说,显示除了匹配正则表达式的部分之外的所有内容?

也就是说,-v标志不是答案,因为它根本不显示包含匹配的文件,但是我想显示这些行,但不显示匹配的行的部分。

编辑:我想在sed上使用grep,因为它可以在多行上执行“仅匹配”匹配,具有:

cat file.xml|grep -Pzo "<starttag>.*?(\n.*?)+.*?</starttag>"

3 个答案:

答案 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'