Text-Processing

使用 Linux grep 命令搜尋以相同字元開頭和結尾的單詞

  • October 7, 2022

如何使用 Linux grep命令在文件中搜尋以相同字元開頭和結尾的單詞?我嘗試了一些答案,但沒有奏效。謝謝!

假設輸入每行包含一個單詞,您可以使用

grep -x '\(.\).*\1' file

…提取以相同字元開頭和結尾的所有行。這是通過使用 擷取該行上的第一個字元來完成的\(.\),允許該行上的其餘字元是任何字元(帶有.*),然後使用反向引用在最後強制匹配擷取的字元\1

-x選項grep告訴實用程序模式必須匹配整行,而不僅僅是行的一部分。如果沒有-x,則必須在正則表達式中插入顯式錨點以確保匹配完整的行:^\(.\).*\1$

範例在我係統的字典上執行,僅顯示 5 個第一個結果:

$ grep -x '\(.\).*\1' /usr/share/dict/words | head -n 5
aa
aba
abaca
abasia
abepithymia

如果您正在處理每行包含多個以空格分隔的單詞的輸入,那麼您可以通過首先將其拆分為每行一個單詞來預處理該文本。在這裡,我另外將所有字元轉換為小寫,tr同時用換行符替換空格,並通過以下方式刪除重複項sort -u

tr ' [:upper:]' '\n[:lower:]' <file | sort -u | grep -x '\(.\).*\1'

請注意,這忽略了“普通文本”可能包含標點符號和其他不屬於單詞的字元的事實。


在評論(現已刪除)中指出,該grep命令遺漏了單字母單詞,從技術上講,這些單詞以相同的字元開頭和結尾。

要獲得這些:

grep -x -e '\(.\).*\1' -e . file

現在返回以相同字元開始和結束的行或僅包含單個字元的行。

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