Linux

與另一個命令一起使用時如何 grep 多個字元串?

  • March 18, 2022

我正在嘗試找出如何使用:

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)。

引用自:https://unix.stackexchange.com/questions/694796