Я бы просто пропустил это через секунду, 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
в одной строке?