Возможно найти файл, который имеет данный хеш MD5, но не возможно произвести такой файл из самого хеша.
Ключ к использованию 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 agreps.
$ 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
с единственной позволенной ошибкой.
Я не знаю, как Вы могли указать это к agrep
Однако Вы смогли использовать оболочку для решения проблемы. Например, с bash
. В следующем: Установите переменную keyword
кому: hack
Установите длину keyword
в l
Передача l
в awk
через названную переменную limit
, и укажите это awk
распечатайте записи чья длина (как определено awk встроенной функцией length
) равно limit
keyword=hack; l=${#keyword};
agrep -1 $keyword /usr/share/dict/words | awk -v limit=$l 'length == limit'
Jack
Mack
back
hack
hake
hank
hark
hawk
heck
hick
hock
jack
lack
pack
rack
sack
tack
yack