在文字檔案中搜尋以 或 開頭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]
將匹配單一i
或g
。- 此特定正規表示式中的所有其他字元 (
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”才能匹配
- 成功配對後,我們會顯示該單字。