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

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

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

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

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

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

решение1

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

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

решение2

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

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

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

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

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

Связанный контент