2012-12-05 16 views
3

有沒有什麼辦法可以做到僅在grep中顯示字符串匹配部分(-o標誌)的相反方式,即顯示除匹配正則表達式的部分之外的所有內容?在grep中「唯一匹配」的對面嗎?

也就是說,-v標誌不是答案,因爲它根本不會顯示包含匹配的文件,但我想顯示這些行,但不是匹配行的部分。

編輯:我想用grep在SED,因爲它可以做到「只匹配」多行匹配,具有:

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

回答

1

我不認爲有一個方法grep的。

如果使用ack,你可以輸出Perl的特殊變量$`和$」變量前和比賽結束後分別顯示的一切,:

ack string --output="\$`\$'" 

同樣,如果你想輸出沿幹了什麼比賽其他文本,你可以使用$ &其中包含匹配的字符串;

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

這是一個相當不尋常的要求,我不認爲grep會交替這樣的字符串。響應OP的編輯

sed -n 's/$PATTERN//gp' file 

編輯:你可以用sed實現這一點,雖然

你可以做多匹配與sed也一樣,如果該文件是足夠小,它全部加載到內存:

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

你可以做一點點的幫助sed

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