У меня есть файл с несколькими очень длинными строками. Я хочу grep для строки, которая может встречаться в файле несколько раз, в том числе, возможно, более одного раза в одной строке.
$ cat 2014-11-03.json | grep 218
Это производит нечитаемый вывод. Там слишком много всего.
$ cat 2014-11-03.json | grep -o 218
Это сокращает слишком много. Он показывает только соответствующий шаблон без какого-либо контекста.
В основном, я хочу вывод, как
... <category_id>218</category_id> ...
(Да, это XML, но я не хочу анализировать XML. Я просто хочу вывести соответствующую строку с несколькими символами по обе стороны от нее. Всего несколько символов, а не вся строка.)
Grep, кажется, имеет опции для отображения только совпавшей строки, или совпавшей строки в контексте полной строки (поведение по умолчанию), или совпавшей строки в контексте нескольких строк до и после, но я не могу найти опцию чтобы показать совпавшую строку в контексте нескольких символов до и после.
$ cat 2014-11-03.json | tr ' ' '\n' | grep 218
Это не идеально: он работает до тех пор, пока в рассматриваемом файле есть пробелы примерно в нужных местах. Это сработало для меня на этот раз, но нет никаких гарантий, что это будет снова.