grep для частичной строки в файле - PullRequest
0 голосов
/ 24 января 2020

Мне нужно найти все экземпляры почтовой аббревиатуры для Айдахо в плоском текстовом файле, которому предшествуют ровно четыре символа, а за которыми следует любое количество символов. Очевидно, подстановочные знаки не работают, но это то, что я ищу:

???? ID *

Я знаю, что должен это знать, но я просто не понимаю .

Это не сработало:

grep "[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]ID" filename
grep '^[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][I][D]*' filename
grep '^[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][I][D]$' filename
grep ....ID* filename
grep "....ID*" filename

Что я забыл?

'root' запрашиваемый пример ввода и желаемый вывод. Приношу свои извинения за то, что не включил это, скорее:

ВХОД:

servername HDKSIDJIELSJ more stuff
servername LKAIIDKEJAHHLL more stuff
servername SLKERILELLWELKM more stuff
servername WOIERISLKJD more stuff
servername LQOEIDLKJV more stuff
servername POCEIDLKEKJSH more stuff
servername SLKENCLEISJEHJ more stuff
servername LSKESCIEHAL more stuff

ВЫХОД:

servername HDKSIDJIELSJ more stuff
servername LKAIIDKEJAHHLL more stuff
servername LQOEIDLKJV more stuff
servername POCEIDLKEKJSH more stuff

1 Ответ

0 голосов
/ 25 января 2020

Вы, кажется, извлекаете первые 4 символа alphanumeri c и затем ID из начала строк.

Используйте

grep -o '^[[:alnum:]]\{4\}ID' filename

См. онлайн grep demo :

s="12ABID More text...
MNDFID another line...
Nothing here";
grep -o '^[[:alnum:]]\{4\}ID' <<< "$s";

Вывод:

12ABID
MNDFID

Здесь -o заставляет grep выводить только совпадающие подстроки, а шаблон POSIX BRE соответствует

  • ^ - начало строки
  • [[:alnum:]]\{4\} - четыре алфавита c символов
  • ID - подстрока ID
...