
我怎麼能匹配audio.itunes.apple.com並忽略http://streamingaudio.itunes.apple.com使用 grep 在日誌檔中?
答案1
大多數grep
實作都支援一個-w
選項單字匹配:
grep -wF audio.itunes.apple.com
或對於grep
無法-w
與以下組合使用的實作(如 Solaris) -F
:
grep -w 'audio\.itunes\.apple\.com'
只會找到包含的行,audio.itunes.apple.com
前提是它之前或之後都沒有單字字符grep
(單字字元為字母數字或底線(對於2.19 之前的GNU 版本僅限於單字節字元))。 Solaris 上的某些grep
實作還限制匹配的字串以單字字元開頭(儘管不一定以單字字元結尾),除非該非單字字元位於行的開頭(儘管在這種情況下,作為字串的第一個字符,這沒有什麼區別)a
。
因此,這裡它會匹配 on,http://audio.itunes.apple.com
因為/
它是非單字字符,但不會匹配 on,http://streamingaudio.itunes.apple.com
因為g
前面的audio
是單字字符。
POSIX 等效項是:
grep -E '(^[^[:alnum:]_])audio\.itunes\.apple\.com([^[:alnum:]_]|$)'
或使用 BRE:
grep -x '\(.*[^[:alnum:]_]\)\{0,1\}audio\.itunes\.apple\.com\([^[:alnum:]_].*\)\{0,1\}'
一些grep
實現,包括 GNUgrep
支援\<
正規表示式運算符,該運算符在非單字和單字之間的轉換處進行匹配(Solarisgrep
具有\<
與-w
上面相同的奇數額外限制)。所以你可以使用:
grep '\<audio\.itunes\.apple\.com'
與這些grep
實作。
答案2
請使用 -v, --invert-match
反轉匹配的意義,以選擇不匹配的行。 (-v 由 POSIX 指定。)