Agrep

在 agrep 中指定字長?

  • December 23, 2013

agrep用來查找相似的拼寫詞,例如:

agrep -1 hack /usr/share/dict/words

但是它返回的單詞太多,所以我也希望單詞的長度與關鍵字相同。我該如何指定?

使用 1 個 agrep

使用的關鍵agrep是要認識到您可以控制添加、替換和刪除字元等操作的成本。對於插入,它是-I開關。對於刪除它是-D.

$ agrep -1 -I2 -D2 '^hack$' /usr/share/dict/words

例子

$ agrep -1 -I2 -D2 '^hack$' /usr/share/dict/words
back
cack
fack
haak
hack
haik
hank
hark
hask
hawk
heck
hick
hock
huck
Jack
jack
lack
Mack
mack
Pack
pack
rack
sack
tack
Wack
wack
yack
Zack
zack

細節

因此,如果我們將插入成本設置為 1 高於我們願意容忍的錯誤數量,並且對刪除成本做同樣的事情,我們將永遠不會插入或刪除任何字元,從而保持我們的長度,即我們匹配的模式的長度hack,即 4。

因此,在上述命令中,我們將誤差範圍設置為 1 ( -1)。我們已將執行和插入或刪除的成本設置為 2 ( -I2 -D2)。我們已經保護了我們的結果,以便它們只匹配以我們的模式 ( ^hack$) 開頭和結尾的整個單詞的字元串。

**注意:**插入符號 ( ^) 表示字元串的開頭,美元符號 ( $) 表示結尾。這些被稱為錨。

使用 2 個 agrep

作為替代方案,您也可以使用 2 個 agrep。

$ agrep '^[a-zA-Z]{4}$' /usr/share/dict/words | agrep -1 'hack'

例子

$ agrep '^[a-zA-Z]{4}$' /usr/share/dict/words | agrep -1 'hack'
back
cack
Chac
Chak
dhak
fack
haak
hack
haik
hake
hako
haku
hank
hark
hask
hawk
heck
hick
hock
huck
Jack
jack
lack
Mack
mack
Pack
pack
rack
sack
Shak
tack
thak
Wack
wack
yack
Zack
zack

細節

第一個agrep任務是查找長度為 4 個字元的字元串集。第二個agrep將該集合進一步減少為僅與您的模式匹配的字元串,hack並允許單個錯誤。

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