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.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.