Unix - Как найти точную строку в файле - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь найти все файлы, которые имеют точно такой же идентификатор, как указано в другом файле, и поместить имена файлов в другой файл.Я использую приведенную ниже команду для поиска файлов.

grep -w -f SearchList.txt INFILES* > matched.txt

Идентификаторы перечислены в примере файла SearchList.txt -

450462134
747837483
352362362

Файлы INFILES содержат данные в этом формате -

0120171116 07: 37: 45: 828501 450462134 000001205 012017111607: 37: 45: 828501 747837483 000001205 012017111607: 37: 45: 828501 352362362 000001205

Идентификаторы, которые я ищу, соединены с другим текстом в начале, но в конце есть пробел.

Я попытался поместить \ b в начало и конец поискового текста в файле SearchList.txt, но я все еще получаю неправильные результаты.

Будем очень благодарны за любые команды, ведущие к правильной команде.

-bash-3.2$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

-bash-3.2$ grep --version
grep (GNU grep) 2.5.1

1 Ответ

0 голосов
/ 26 сентября 2018

Опция -w для grep фактически вставляет \b на обоих концах шаблона, вы хотите, чтобы он был только в конце.Один из возможных вариантов - добавить \b к шаблонам с sed, например:

sed 's/$/\\b/' SearchList.txt

Поскольку вас интересует только совпадение имен файлов, вам следует использовать параметр -l с grep.Теперь используйте это вместе с grep и подстановкой процесса:

grep -lf <(sed 's/$/\\b/' /path/to/SearchList.txt) INFILES*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...