有沒有什麼辦法可以做到僅在grep中顯示字符串匹配部分(-o標誌)的相反方式,即顯示除匹配正則表達式的部分之外的所有內容?在grep中「唯一匹配」的對面嗎?
也就是說,-v標誌不是答案,因爲它根本不會顯示包含匹配的文件,但我想顯示這些行,但不是匹配行的部分。
編輯:我想用grep在SED,因爲它可以做到「只匹配」多行匹配,具有:
cat file.xml|grep -Pzo "<starttag>.*?(\n.*?)+.*?</starttag>"
有沒有什麼辦法可以做到僅在grep中顯示字符串匹配部分(-o標誌)的相反方式,即顯示除匹配正則表達式的部分之外的所有內容?在grep中「唯一匹配」的對面嗎?
也就是說,-v標誌不是答案,因爲它根本不會顯示包含匹配的文件,但我想顯示這些行,但不是匹配行的部分。
編輯:我想用grep在SED,因爲它可以做到「只匹配」多行匹配,具有:
cat file.xml|grep -Pzo "<starttag>.*?(\n.*?)+.*?</starttag>"
我不認爲有一個方法grep的。
如果使用ack,你可以輸出Perl的特殊變量$`和$」變量前和比賽結束後分別顯示的一切,:
ack string --output="\$`\$'"
同樣,如果你想輸出沿幹了什麼比賽其他文本,你可以使用$ &其中包含匹配的字符串;
ack string --output="Matched: $&"
這是一個相當不尋常的要求,我不認爲grep
會交替這樣的字符串。響應OP的編輯
sed -n 's/$PATTERN//gp' file
編輯:你可以用sed
實現這一點,雖然
你可以做多匹配與sed
也一樣,如果該文件是足夠小,它全部加載到內存:
sed -rn ':r;$!{N;br};s/<starttag>.*?(\n.*?)+.*?<\/starttag>//gp' file.xml
你可以做一點點的幫助sed
:
grep "pattern" input_file | sed 's/pattern//g'