Я бы просто пропустил это через секунду, grepчтобы удалить их:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
-vПереворачивает матч, печать строки , которые не соответствуют шаблону и -Pпозволяет Perl Compatible Regular Expressions , которые позволяют нам использовать отрицательные Утверждения назад . Это конкретное регулярное выражение будет соответствовать .jsтому, чему не предшествует то, debugкаким образом (поскольку мы инвертируем совпадения) .jsбудут напечатаны только эти файлы.
Однако, как указал @QuestionOverflow в комментариях, это может привести к непреднамеренному побочному эффекту отфильтровывания строк , содержащих OKи jsтак как grep -vприменяется ко всему выводу, а не только к имени файла. Чтобы избежать этого, просто добавьте двоеточие (это то, что grepиспользуется для отделения имен файлов от содержимого файлов):
grep -r --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js:'
Это все равно не удастся, если ваша строка ввода содержит foo.js:или если ваше имя файла содержит :. Итак, чтобы быть уверенным, используйте другой подход:
grep -Tr --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js\t'
-TПриводит grepк печати вкладки между именем файла и содержимое файла. Итак, если мы просто добавим a \tв конец регулярного выражения, оно будет сопоставляться только с именами файлов, а не с содержимым строки.
Тем не менее, использованиеfind может иметь больше смысла независимо.
OKи.jsв одной строке?