Usando 1 concordar
A chave para usar agrep
é reconhecer que você pode controlar o custo de coisas como adicionar, substituir e excluir caracteres. Para inserção, é a opção -I
. Para exclusão, é -D
.
$ agrep -1 -I2 -D2 '^hack$' /usr/share/dict/words
Exemplo
$ 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
Detalhes
Portanto, se definirmos o custo da inserção 1 mais alto que o número de erros que estamos dispostos a tolerar e fizermos o mesmo para o custo das exclusões, nunca inseriremos ou excluiremos nenhum caractere, mantendo assim o tamanho, qual é o comprimento do padrão que estamos combinando, hack
, ou seja, 4.
Portanto, no comando acima, definimos nossa margem de erro em 1 ( -1
). Definimos nosso custo de fazer e inserir ou uma exclusão para 2 ( -I2 -D2
). E guardamos nossos resultados para que eles correspondam apenas a strings que são palavras inteiras que começam e terminam com nosso padrão, ( ^hack$
).
OBSERVAÇÃO: O acento circunflexo ( ^
) significa o início da sequência e o cifrão ( $
) o final. Estes são chamados de âncoras.
Usando 2 concordes
Como alternativa, você também pode usar 2 agreps.
$ agrep '^[a-zA-Z]{4}$' /usr/share/dict/words | agrep -1 'hack'
Exemplo
$ 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
Detalhes
O primeiro agrep
é encarregado de encontrar o conjunto de seqüências de caracteres com 4 caracteres de comprimento. O segundo agrep
reduz esse conjunto ainda mais para apenas strings que correspondam ao seu padrão de hack
com um único erro permitido.