Command-Line

grep - 將在字元串中準確找到 3 個 a 的正則表達式

  • May 29, 2020

我想更改以下命令,以便正則表達式匹配 /usr/share/dict/words 中恰好包含3 個 a 而不是至少3 個 a 的單詞。

cat /usr/share/dict/words | grep "a.*a.*a" | grep -v "'s$" | wc -l

我該怎麼做呢?

這是[^a](匹配除 之外的任何字元a)而不是.(匹配任何字元)的一種方法:

$ grep -E '^([^a]*a){3}[^a]*$' /usr/share/dict/cracklib-small | shuf -n 4
areaway
humanitarian
capitalizations
autonavigator

您也可以編寫^[^a]*(a[^a]*){3}$具有相同結果的正則表達式。

當你想要不同數量的 a 時,它也相當於^[^a]*a[^a]*a[^a]*a[^a]*$which 不縮放。雖然性能要好得多,但這並不重要,除非您正在瀏覽千兆字節的數據。

除了顯式使用^和正則$表達式錨操作符,您還可以使用-x隱式執行此操作的選項。另請參閱-i不區分大小寫匹配的選項(根據語言環境):

grep -xiE '([^a]*a){3}[^a]*'

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