Text-Processing
使用 Linux grep 命令搜尋以相同字元開頭和結尾的單詞
如何使用 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
現在返回以相同字元開始和結束的行或僅包含單個字元的行。