Назад | Перейти на главную страницу

Bash / grep: игнорировать строки длиной более N символов

У меня есть команда find / grep, которую я использую для поиска в кодовой базе своих проектов, таким образом:

find folder1 folder2 folderetc -print | awk '{print "\""$0"\""}' | xargs grep -n "search-string"

То, что меня регулярно раздражает, - это минифицированные файлы javascript и css, в которых все упаковано в одну строку (из-за, вероятно, ошибочного убеждения, что удаление символов новой строки значительно ускорит загрузку файлов javascript). С этими упакованными или минифицированными файлами всегда есть незапакованная версия, которую я хочу видеть в своих результатах. Я никогда не хочу видеть упакованную версию, так как это просто приводит к экранам и экранам нечитаемого мусора.

Нет систематического способа указать grep избегать минифицированных или упакованных файлов, поскольку нет соглашения об именах. Но мне пришло в голову, что я могу отфильтровать результаты, в которых длина строки превышает, скажем, 400 символов. Есть ли способ сделать это с помощью grep (или чего-то еще?)

Да, есть:

$ echo foobar | awk 'length($0) < 7 && $0~/foo/'
foobar

Заменить echo с вашей командой поиска и foo со строкой для поиска. Настроить 7 до длины, по которой вы хотите выполнить фильтрацию.

Вы можете взглянуть на подтверждать, который в основном оптимизирован для программистов с помощью grep. Он игнорирует уменьшенные файлы JS и CSS, а также любые файлы системы контроля версий, лежащие в вашем каталоге.