Изменить поиск grep при использовании файла в качестве источника - PullRequest
2 голосов
/ 11 июня 2019

Пытаясь вывести 20 символов перед строкой, используя grep, если источником запросов является файл

Справочная информация о проблеме: в моем файле много длинных строк текста, и я пытаюсь найти этот файл для поиска.строка и выведите 20 символов перед интересующей строкой.Для этого я использую следующие параметры grep -E -o ".{0,20}string", который работает и дает правильный вывод, когда я пытаюсь использовать любую заданную строку.

Проблема, с которой я сейчас сталкиваюсь, пытается объединить это с параметром -f в grep, поскольку у меня много запросов, которые содержатся в другом файле.

Я не могу найти правильный способ добавить модификатор. {0,20} к каждому запросу, содержащемуся в моем текстовом файле.Любая помощь будет великолепна.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Пример ввода (input.txt):

ezfnzjnefnzefnz
ezenfjznefnkz123hello
enzjfzeknzkabcworld
fzebkfzbejkfbzk

Пример файла шаблона (pattern.txt):

hello
world

Команда:

grep -Eo -f <(sed 's/^/.{0,3}/' pattern.txt) input.txt 

Вывод:

123hello
abcworld

Команда Sed просто добавляет .{0,3} в начале каждого паттерна.Конечно, вы можете использовать другие методы для обновления файла шаблона.

0 голосов
/ 11 июня 2019

Не могли бы вы попробовать следующее, протестировано только с показанными образцами.

awk 'FNR==NR{a[$0];next} {for(i in a){if(index($0,i)){val=index($0,i);print substr($0,val-3)}}}'  pattern.txt input.txt

Теперь добавим форму не одного вкладыша вышеуказанного решения.

awk '
FNR==NR{
  a[$0]
  next
}
{
  for(i in a){
     if(index($0,i)){
       val=index($0,i)
       print substr($0,val-3)
     }
  }
}
'  pattern.txt input.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...