在字典檔案中尋找具有特定特徵的單字

在字典檔案中尋找具有特定特徵的單字

在文字檔案中搜尋以 或 開頭b和結尾o並包含i或 的單字。g

必須在顯示具有上述規範的單字的終端機中鍵入命令。

我使用了以下內容,但它不止於一個單字並且包含空格:

~$  egrep -n '\bb.*(i|g).*o\b'

我使用的是 Linux Ubuntu,不確定如何執行該聲明。我嘗試了一些指令,但都失敗了。任何人都可以幫我解開正規表示式語句,因為我很難這麼做?

舉個例子:假設我在文字檔案中有以下隨機單字:

boo djhg
bio jdjjf
dgdhd bgo
ghhh

然後需要突出顯示“boo”、“bio”和“bgo”等字。

答案1

您要尋找的命令是grep,您想要的正規表示式是b[[:alnum:]]*[ig][[:alnum:]]*o

  • [[:alnum:]]將匹配單個字母數字字元。
  • *將匹配前一個表達式的任意數字(包括零)。
  • [ig]將匹配單一ig
  • 此特定正規表示式中的所有其他字元 (b和) 都與自身相符。o

使用[[:alnum::]]*not 可以避免.*匹配包含空格的單字。

grep用法就像

grep OPTIONS 'EXPRESSION' INPUT-FILES

並將輸出EXPRESSION與其標準輸出(在本例中為終端)相符的行。

在這種情況下,您需要使用-w-o選項,它強製表達式匹配單字(由非單字字元包圍的字串)並僅傳回匹配的資料(而不是整行)。

$ grep -w -o 'b[[:alnum:]]*[ig][[:alnum:]]*o' words
bio
bgo

你提到你想要強調匹配的單字。這是 GNUgrep可以做的事情。我-o在這裡放棄了獲取每場比賽的整行的選項,否則你只會得到與之前相同的結果,但突出顯示,這會很無聊。

$ grep --color -w 'b[[:alnum:]]*[ig][[:alnum:]]*o' 個字
生物傑傑傑夫
dgdhd巴戈

正如您所看到的,這僅顯示包含匹配項的行上的匹配項。要查看完整的輸入(甚至沒有匹配的行),並突出顯示匹配項,我們必須刪除該-w選項並執行

$ grep --color -E '\bb[[:alnum:]]*[ig][[:alnum:]]*o\b|$' 個字
生物傑傑傑夫
dgdhd巴戈

我們必須新增該-E選項,因為|是擴充的正規表示式。將\b在任何單字邊界匹配。

答案2

我會用來grep這樣做:

egrep -i "^b.*(i|g)+.*o$" /usr/share/dict/words
  • ^b以“b”開頭
  • .*任何時候任何事
  • (i|g)*“i”或“g”一次或多次
  • o$以“o”結尾

答案3

set -f; for w in `cat /usr/share/dict/words`; do
   case $w in b*[ig]*o ) echo "$w" ;; esac
done
# you could as well say: $(< /usr/share/dict/words) in place of the backquoted cat.
# if your version of bash supports it.

我們將單字檔案拆分為單詞$w,然後對其進行通配符檢查。

  • 通配符模式為:b*[ig]*o,可解讀為:
  • $w 必須以字母「b」開頭。
  • $w 必須以字母「o」結尾。
  • $w 必須包含中間的“i”或“g”才能匹配
  • 成功配對後,我們會顯示該單字。

相關內容