GNU के साथ awk:
$ printf '%s\n' {foo,bar}{bar,foo} neither | gawk 'xor(/foo/,/bar/)'
foofoo
barbar
या आंशिक रूप से:
awk '((/foo/) + (/bar/)) % 2'
एक साथ grepके लिए के साथ समर्थन -P(PCRE):
grep -P '^((?=.*foo)(?!.*bar)|(?=.*bar)(?!.*foo))'
के साथ sed:
sed '
/foo/{
/bar/d
b
}
/bar/!d'
आप केवल संपूर्ण शब्दों को विचार करने के लिए (न तो है कि वहाँ चाहते हैं fooऔर न ही barमें foobarया barbarउदाहरण के लिए), आप तय करने के लिए कैसे उन शब्दों को सीमांकित कर रहे हैं देख सकते हैं। यदि यह अक्षरों, अंकों और अंडरस्कोर के अलावा किसी भी वर्ण द्वारा -wहोता है जैसे कई grepकार्यान्वयन का विकल्प होता है, तो आप उन लोगों को बदल देंगे:
gawk 'xor(/\<foo\>/,/\<bar\>/)'
awk '((/(^|[^[:alnum:]_)foo([^[:alnum:]_]|$)/) + \
(/(^|[^[:alnum:]_)bar([^[:alnum:]_]|$)/)) % 2'
grep -P '^((?=.*\bfoo\b)(?!.*\bbar\b)|(?=.*\bbar\b)(?!.*\bfoo\b))'
के लिए sedहै कि एक सा जटिल जब तक आप एक है हो जाता है sedजीएनयू तरह कार्यान्वयन sed कि समर्थन करता है \</ \>जीएनयू की तरह शब्द सीमाओं के रूप में awkकरता है।