В bash Я хочу вернуть имя файла (и путь к файлу) для каждого файла типа .php|.html|.js, содержащего строку без учета регистра "document.cookie" | "setcookie"
Как мне это сделать?
В bash Я хочу вернуть имя файла (и путь к файлу) для каждого файла типа .php|.html|.js, содержащего строку без учета регистра "document.cookie" | "setcookie"
Как мне это сделать?
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
Флаг r означает рекурсивный поиск (поиск в подкаталогах). Флаг i означает, что регистр не учитывается.
Если вам просто нужны имена файлов, добавьте флаг l (строчные буквы L):
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
		Попробуйте что-то вроде grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
-i делает это регистронезависимым
. в конце означает, что вы хотите начать с текущего каталога, его можно заменить любым каталогом.
-r означает делать это рекурсивно, прямо вниз по дереву каталогов
-n печатает номер строки для совпадений.
--include позволяет добавлять имена файлов, расширения. Подстановочные знаки приняты
Для получения дополнительной информации см.: http://www.gnu.org/software/grep/
 find и grep для строки:
Здесь будут найдены все файлы трех типов в /start/path и grep для регулярного выражения '(document\.cookie|setcookie)'. Разделить на две строки с обратной косой чертой только для удобства чтения...
find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \
 xargs egrep -i '(document\.cookie|setcookie)'
		Звучит как идеальная работа для grep или, возможно, ack
Или эта замечательная конструкция:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
		find . -type f -name '*php' -o -name '*js' -o -name '*html' |\
xargs grep -liE 'document\.cookie|setcookie'
		Чтобы включить еще одну альтернативу, вы также можете использовать это:
 find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \;
Где:
-regextype posix-extended сообщает find, какое регулярное выражение ожидать-regex "^.*\.(php|html|js)$" сообщает find, что имена файлов регулярных выражений должны совпадать с -exec grep -EH '(document\.cookie|setcookie)' {} \; сообщает find выполнить команду (с ее параметрами и аргументами), указанную между опцией -exec и \; для каждого найденного файла, где {} обозначает, где находится файл путь идет в этой команде.
а
E указывает grep использовать расширенное регулярное выражение (для поддержки круглых скобок) и...H указывает grep печатать пути файлов до совпадений.И, учитывая это, если вам нужны только пути к файлам, вы можете использовать:
 find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \; | sed -r 's/(^.*):.*$/\1/' | sort -u
Где
| [pipe] посылает вывод find следующей команде после этого (которая sed, затем sort)r указывает sed использовать расширенное регулярное выражение.s/HI/BYE/ сообщает sed заменить каждое первое вхождение (на строку) "HI" на "BYE" и...s/(^.*):.*$/\1/ сообщает ему заменить регулярное выражение (^.*):.*$ (что означает  группа [материал, заключенный в ()], включая все [.*= один или несколько символов любого типа] из начало строки [^] до "первой": "за ней следует что-нибудь до конца строки [$]) с помощью первой  группы [\1] заменено регулярное выражение.u говорит sort для удаления повторяющихся записей (возьмите sort -u как необязательный).... FAR - самый элегантный способ. Как я уже сказал, мое намерение состоит в том, чтобы увеличить диапазон возможностей (а также дать более полное объяснение некоторых инструментов, которые вы могли бы использовать).