“的对立面”;“仅匹配”;在grep?

“的对立面”;“仅匹配”;在grep?,grep,Grep,在grep中只显示字符串的匹配部分(即-o标志),也就是说,除了与正则表达式匹配的部分之外,还有什么方法可以实现相反的效果呢 也就是说,-v标志不是答案,因为它根本不会显示包含匹配项的文件,但我想显示这些行,而不是匹配的部分 编辑:我想使用grep over sed,因为它可以在多行上进行“仅匹配”匹配,包括: cat file.xml|grep -Pzo "<starttag>.*?(\n.*?)+.*?</starttag>" cat file.xml | grep

在grep中只显示字符串的匹配部分(即-o标志),也就是说,除了与正则表达式匹配的部分之外,还有什么方法可以实现相反的效果呢

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

编辑:我想使用grep over sed,因为它可以在多行上进行“仅匹配”匹配,包括:

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

我认为grep没有办法

如果使用,可以输出Perl的特殊变量$`和$'变量,分别显示匹配前后的所有内容:

ack string --output="\$`\$'"
类似地,如果您想将匹配的内容与其他文本一起输出,您可以使用$&它包含匹配的字符串

ack string --output="Matched: $&"

这是一个相当不寻常的要求,我不认为
grep
会像那样替换字符串。您可以通过
sed
实现这一点,不过:

sed -n 's/$PATTERN//gp' file
编辑响应OP的编辑:

如果文件足够小,可以将其全部加载到内存中,也可以使用
sed
进行多行匹配:

sed -rn ':r;$!{N;br};s/<starttag>.*?(\n.*?)+.*?<\/starttag>//gp' file.xml
sed-rn':r;$!{N;br};s/*?(\n.*?+.*?//gp'file.xml

您可以在
sed
的帮助下完成此操作:

grep "pattern" input_file | sed 's/pattern//g'