有什么方法可以做相反的事情,只显示 grep 中字符串的匹配部分(-o 标志),即显示除与正则表达式匹配的部分之外的所有内容?
也就是说, -v 标志不是答案,因为它根本不会显示包含匹配项的文件,但我想显示这些行,但不显示匹配行的部分。
编辑:我想使用 grep 而不是 sed,因为它可以在多行上进行“仅匹配”匹配,其中:
cat file.xml|grep -Pzo "<starttag>.*?(\n.*?)+.*?</starttag>"
Run Code Online (Sandbox Code Playgroud)
这是一个相当不寻常的要求,我认为不会grep像那样交替字符串。不过,您可以使用以下方法来实现此目的sed:
sed -n 's/$PATTERN//gp' file
Run Code Online (Sandbox Code Playgroud)
编辑以响应OP的编辑:
sed如果文件足够小以将其全部加载到内存中,您也可以使用 进行多行匹配:
sed -rn ':r;$!{N;br};s/<starttag>.*?(\n.*?)+.*?<\/starttag>//gp' file.xml
Run Code Online (Sandbox Code Playgroud)