Используя это:
grep -A1 -B1 "test_pattern" file
выдаст одну строку до и после сопоставленного шаблона в файле. Есть ли способ отображать не строки, а указанное количество символов?
Строки в моем файле довольно большие, поэтому я не заинтересован в печати всей строки, а просто наблюдаю за совпадением в контексте. Любые предложения о том, как это сделать?
Ответы:
3 символа до и 4 символа после
источник
brew install homebrew/dupes/grep
и запустите его какggrep
.Это будет соответствовать до 5 символов до и после вашего шаблона. Ключ -o указывает grep показывать только совпадение, а -E использовать расширенное регулярное выражение. Обязательно поместите кавычки вокруг вашего выражения, иначе оно может быть интерпретировано оболочкой.
источник
{0,255}
работах{0,256}
даетgrep: invalid repetition count(s)
Вы могли бы использовать
источник
Вы имеете в виду, как это:
?
Это напечатает до двадцати символов по обе стороны от
test_pattern
.\{0,20\}
Обозначения как*
, но указывает , от нуля до двадцати повторений вместо нуля или more.The-o
говорит , чтобы показать только сам матч, а не всей линии.источник
grep: Invalid content of \{\}
С помощью
gawk
вы можете использовать функцию соответствия:Если с вами все в порядке
perl
, более гибкое решение: «Далее» напечатает три символа перед шаблоном, затем реальный шаблон и затем 5 символов после шаблона.Это также может быть применено к словам, а не только к символам. Следующие будут печатать одно слово перед фактической соответствующей строкой.
Далее будет напечатано одно слово после шаблона:
Далее будет напечатано одно слово перед шаблоном, затем фактическое слово, а затем одно слово после шаблона:
источник
Вы можете использовать регулярное выражение grep для поиска + второй grep для выделения
23_string_and
источник
Я никогда не запомню эти загадочные модификаторы команд, поэтому я взял главный ответ и превратил его в функцию в моем
~/.bashrc
файле:Вот как это выглядит в действии:
Файл, о котором идет речь, представляет собой одну непрерывную строку 25 КБ, и безнадежно найти то, что вы ищете, используя обычные
grep
.Обратите внимание на два разных способа вызова
cgrep
этогоgrep
метода параллелей .Существует «более изящный» способ создания функции, где «2» передается только при установке, что позволяет сохранить 4 строки кода. У меня это не удобно, хотя. Нечто подобное
${parm2} $parm2
. Если я найду его, я пересмотрю функцию и этот ответ.источник