Указать длину слова в agrep?

Возможно найти файл, который имеет данный хеш MD5, но не возможно произвести такой файл из самого хеша.

6
23.12.2013, 14:23
2 ответа

Используя 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 agreps

Как альтернатива можно также использовать 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 с единственной позволенной ошибкой.

5
27.01.2020, 20:28
  • 1
    Спасибо. Что означает "^hack$"? –  StackExchange for All 21.12.2013, 04:33
  • 2
    Это привязывает строку, удостоверяясь, что это - начало и конец строки. –  slm♦ 21.12.2013, 04:36
  • 3
    , но "ack" не начинается или заканчивается "взломом"? –  StackExchange for All 21.12.2013, 04:38
  • 4
    @Tim - да я просто замечаю это, занимаясь расследованиями. –  slm♦ 21.12.2013, 04:38
  • 5
    @Tim - видят обновления, понял это! –  slm♦ 21.12.2013, 05:21

Я не знаю, как Вы могли указать это к 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
1
27.01.2020, 20:28
  • 1
    Спасибо! можно ли объяснить "awk-v limit= $l 'длина () == предел'"? Является длина () функцией? Как это знает, каков его аргумент? –  StackExchange for All 21.12.2013, 04:24

Теги

Похожие вопросы