В 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 -E ...
>egrep ...
grep: (error|fail): No such file or directory
на Ubuntu Desktop 16; какие-нибудь намеки?
--include=\*.{php,html,js}
Попробуйте что-то вроде grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
-i
делает его случай insensitlve
.
на концах означает , что вы хотите , чтобы начать с текущего каталога, это может быть заменен любой каталог.
что -r
означает сделать это рекурсивно, прямо вниз по дереву каталогов
-n
печатает номер строки для матчей.
--include
позволяет добавлять имена файлов, расширений. Подстановочные знаки принимаются
Для получения дополнительной информации см .: http://www.gnu.org/software/grep/
-l
опцию (просто -n
find
их и grep
для строки
Это найдет все файлы ваших 3-х типов в / start / path и grep для регулярного выражения '(document\.cookie|setcookie)'
. Разделите 2 строки с помощью обратной косой черты только для удобства чтения ...
find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \
xargs egrep -i '(document\.cookie|setcookie)'
-exec grep -l 'sth' {} \;
# egrep -ir --include=file.foo "(foo|bar)" /dir
на ~ 500Gb весовой директории.
Похоже, идеальная работа для grep
или, возможно, ACK
Или это замечательная конструкция:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
-exec grep...
лучше, чем мой xargs
метод, потому что он не захлебнется пробелами в именах файлов.
find . -type f -print0 | xargs -0 -I {} grep "search_string" {}
. Конечно, могут быть добавлены и другие опции.
Просто чтобы включить еще одну альтернативу, вы также можете использовать это:
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 -u
как необязательные).... далеко от самого элегантного способа. Как я уже сказал, я намерен расширить диапазон возможностей (а также дать более полное объяснение некоторых инструментов, которые вы можете использовать).