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