Linux
與另一個命令一起使用時如何 grep 多個字元串?
我正在嘗試找出如何使用:
grep -i
使用多個字元串,在另一個命令上使用 grep 之後。例如:
last | grep -i abc last | grep -i uyx
我希望將以上內容組合成一個命令,但是在網際網路上搜尋時,我只能找到有關如何在 grep 中使用多個字元串的參考,當 grep 與文件一起使用時,而不是命令。我嘗試過這樣的事情:
last | grep -i (abc|uyx)
或者
last | grep -i 'abc|uyx'
但這不起作用。獲得我期望的結果的正確語法是什麼?
提前致謝。
許多選項
grep
單獨使用,從標準選項開始:grep -i -e abc -e uyx grep -i 'abc uyx' grep -i -E 'abc|uyx'
通過一些
grep
實現,您還可以執行以下操作:grep -i -P 'abc|uyx' # perl-like regexps, sometimes also with # --perl-regexp or -X perl grep -i -X 'abc|uyx' # augmented regexps (with ast-open grep) also with # --augmented-regexp grep -i -K 'abc|uyx' # ksh regexps (with ast-open grep) also with # --ksh-regexp grep -i 'abc\|uyx' # with the \| extension to basic regexps supported by # some grep implementations. BREs are the # default but with some grep implementations, you # can make it explicit with -G, --basic-regexp or # -X basic
您可以在(對於 BRE)
(...)
周圍添加 s ,但這不是必需的。s 和s, like也需要用引號引起來,以便按字面意思傳遞,因為它們是 shell 語言語法中的特殊字元。abc|uyx``\(...\)``(``)``|``grep
不區分大小寫的匹配也可以作為正則表達式語法的一部分在某些
grep
實現中啟用(非標準)。grep -P '(?i)abc|uyx' # wherever -P / --perl-regexp / -X perl is supported grep -K '~(i)abc|uyx' # ast-open grep only grep -E '(?i)abc|uyx' # ast-open grep only grep '\(?i\)abc|uyx' # ast-open grep only which makes it non-POSIX-compliant
-i
與標準選項相比,這些並沒有真正帶來太多優勢。例如,如果您希望abc
匹配區分大小寫而uyx
不是區分大小寫,則可能會更有趣,您可以這樣做:grep -P 'abc|(?i)uyx'
或者:
grep -P 'abc|(?i:uyx)'
(以及具有其他正則表達式語法的等效變體)。
等效的標準如下所示:
grep -e abc -e '[uU][yY][xX]'
(請記住,不區分大小寫的匹配通常取決於語言環境;例如,大寫是否
i
取決於I
或İ
可能取決於根據 的語言環境grep -i i
)。