2

Как исключить очень длинные строки из результатов grep ?

Я часто пролистываю множество файлов .js (-r), и некоторые из них компилируются, поэтому они состоят из одной строки, обычно длиной в пару тысяч символов. Из всего этого беспорядка мне трудно увидеть результаты остальных файлов.

Что я должен передать grep чтобы исключить строки, скажем, длиной более 1000 символов?

Я бы предпочел не передавать результат через другой grep, так как это может привести к потере цветов на выходе, или снова добавлять первый grep в конец канала, чтобы вернуть цвета.

2 ответа2

3

Привязка grep к чему-то не обязательно избавит от цветов. Такое поведение является результатом --color=auto (который, если вы проверите alias grep , вероятно, вы используете). Вы можете переопределить его и передать --color=always и grep сохранит цвета даже через канал.

Если исключить линии, вы можете использовать любой инструмент, который вам нравится (например, cut как упоминалось в Amazed). Имейте в виду, что цвета из grep будут вставлять дополнительные байты в соответствующие строки, если это имеет значение для вас. Нет никакого очевидного способа (для меня так или иначе) сделать это в том же самом вызове grep .

1

Следующая команда должна получить то, что вы хотите, т.е. не выводить совпадающие строки, длина которых превышает 1000 символов:

grep -r --color=always $pattern . | cut -c1-1000

Флаг --color=always гарантирует, что последовательности изменения цвета будут сгенерированы grep.

Эта опция по умолчанию имеет значение --color=auto , что делает grep color выводимым, только если он передан в интерактивный терминал, и не использует цвета, когда он передается другой команде.

Источник: https://unix.stackexchange.com/a/113507/48906

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .