
長度為 10 個字元且包含三個連續元音的子字串的單字集。到目前為止我嘗試了這些命令。
grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt
grep -E '^.{10}$&a*.e*.i*.o*.u*' words2.txt
輸入數據,透過 OCR 提取這個截圖:
unpernicious
unperspicuous
unpervious
unpious
unpiteous
unpiteously
unpiteousness
unplebeian
unplenteous
unportmanteaued
unportuous
unprecarious
unprecious
unprecocious
unpredacious
unpresumptuous
unpresumptuously
unpretentious
unpretentiously
unpretentiousness
unpromiscuous
unpropitious
unpropitiously
unpropitiousness
unpugnacious
unpunctilious
unquailed
unquailing
unquailingly
unqueen
unqueened
unqueening
unqueenlike
unqueenly
unquiescence
unquiescent
unquiescently
unquiet
unquietable
unquieted
unquieting
unquietly
unquietness
unquietude
unrapacious
unrebellious
unreligious
unreligiously
unreligiousness
unrighteous
unrighteously
unrighteousness
unsacrilegious
Unsagacious
unsalubrious
unsanctimonious
unsanctimoniously
unsanctimoniousness
unsanguineous
unsanguineously
unseditious
unseeable
unseeing
答案1
你的問題(恕我直言)可以更好地解決awk
,但我只是指出你的命令的問題
grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt
word2.txt
要透過兩次調用過濾文件的內容grep
,這應該看起來像
grep -E '^.{10}$' words2.txt | grep 'a*.e*.i*.o*.u*'
第二種grep
模式應該是[auoie]{3}
,這使我們處於
grep -E '^.{10}$' words2.txt | grep -E '[aouie]{3}'
第一個的輸入grep
是您的檔案。第二個的輸入grep
是第一個的輸出grep
,不是你的文件。
使用 POSIX awk
(如最新版本的 GNU awk
):
$ awk 'length == 10 && /[aouei]{3}/' words2.txt
unpervious
unplebeian
unportuous
unprecious
unquailing
unqueening
unquieting
unquietude
mawk
、BSDawk
和歷史上的 POSIX 之前的實作在正規表示式中awk
不支援{n}
查澤拉斯 (Stéphane Chazelas) 指出。
答案2
您猜對了 10 個字符,但要連續查找 3 個元音,請尋找一組[AEIOU]
:
egrep '^.{10}$' | egrep -i '[AEIOU]{3}'
若要拒絕空白,請使用以下指令:
egrep '^[^ \t]{10}$' | egrep -i '[AEIOu]{3}'
答案3
假設 1 個單字/行,您可以這樣做:
sed -nE '/^.{10}$/!d;/[aAeEiIoOuU]{3}/p' words.txt
答案4
內置grep
PCRE 支援:
grep -iPx '(?=.*[aeiou]{3}.*).{10}'
或者:
grep -wiP '(?=\w*[aeiou]{3}\w*)\w{10}'
當這些單字不是每行一個時搜尋這些單字(-o
如果您的grep
實作支援僅列印匹配的單字而不是列印它們所在的整行,則會新增)。那裡單字表示任意序列單字字元(字母(在拉丁字母中,僅不帶變音符號,(*UCP)
在任何字母中為字母添加一個,但仍然不包括像é
或 之類的元音α
)、數字和底線)。