Grep 20 символов после и до матча

14

У меня проблема в том, что после матча я получаю слишком много информации

grep -RnisI --color=auto "pseudomonas" *

Я хочу получить только 20 символов или 10 слов после и до матча.

Каков правильный инструмент, чтобы сделать такую ​​вещь?

Лео Леопольд Герц 준영
источник
1
Ваш набор опций немного странный, когда вы жалуетесь на слишком много информации. Вы хотите, чтобы одна строка после и до вашего матча отображалась ( -A1и -B1соответственно), но это слишком много? Где именно вы хотите, чтобы ваш вывод был обрезан?
Андреас Визе
1
Можете ли вы привести пример входных данных и ожидаемых результатов?
Рамеш
Я изменил команду, я тестирую в Ubuntu 13.10, дайте мне знать, если она работает для вас. У меня есть опция grep и опция egrep
Eric

Ответы:

23
cat file.txt | grep -o -P '.{0,20}string.{0,20}'

Это должно сделать это для вас

Обновить:

Если вы не хотите cat, вы можете просто использовать grep с файлом в качестве параметра:

grep -o -P '.{0,20}pseudomonas.{0,20}' FileName.html

Кроме того, -P использует Perl Regex, который на страницах руководства говорит, что он экспериментальный, если вы хотите избежать этого флага, вы можете просто использовать вместо него egrep:

grep -Eo '.{0,20}yourstring.{0,20}' yourtestfile.txt
Эрик
источник
Какой у вас отвратительный тестовый файл;)
Ouki
Остальная часть файла на самом деле очень полезна, это часть многострочного комментария в середине Схемы, которую нужно было исключить, не нарушая наш парсер, это была просто хорошая строка, чтобы попробовать это.
Эрик
Так как это один из моих файлов, он установлен на 755, но я вижу, что cat не может быть идеальным для HTML-файла, вы можете попробовать передать имя файла в grep в качестве параметра, см. Мое редактирование.
Эрик
Под 777 файлами я подразумеваю, что у вас есть 777 копий разных файлов, а не чоун. Я запускаю $$$ egrep -o '. {0,20} псевдомонады. {0,20}' * $$$. Команда остается там бесконечность и ничего не делает. Это, опять же, похоже, работает $$$ egrep -ori '. {0,20} pseudomonas. {0,20}' * $$$. То же самое с рекурсией и регистром. Тем не менее, это очень медленно. Я думаю, что это не должно быть так медленно. Grep был значительно быстрее.
Лео Леопольд Герц 준영
если catting не работает, вы всегда можете просто поместить его в файл, добавив > results.txtв конец команды, но он не скажет вам, в каком файле вы его нашли.
Eric
4
pcregrep -MnirIso '(?s).{0,20}pseudomonas.{0,20}' . |
  grep --color -e '^' -e pseudomonas

Предполагается, что совпадения и их контекст не перекрываются, а имена файлов не содержат pseudomonas.

Также обратите внимание, что сообщаемые номера строк соответствуют номерам начала контекста.

Стефан Шазелас
источник