W bash chcę zwrócić nazwę pliku (i ścieżkę do pliku) dla każdego typu pliku .php|.html|.jszawierającego ciąg znaków bez rozróżniania wielkości liter"document.cookie" | "setcookie"
Jak bym to zrobił?
W bash chcę zwrócić nazwę pliku (i ścieżkę do pliku) dla każdego typu pliku .php|.html|.jszawierającego ciąg znaków bez rozróżniania wielkości liter"document.cookie" | "setcookie"
Jak bym to zrobił?
Odpowiedzi:
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
rFlaga oznacza szukać rekurencyjnie (wyszukiwanie podkatalogów). iFlaga oznacza wielkość liter ma znaczenie.
Jeśli chcesz tylko nazwy plików, dodaj flagę l(małe litery L):
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
grep -E ... >egrep ...
grep: (error|fail): No such file or directoryna Ubuntu Desktop 16; jakieś wskazówki?
--include=\*.{php,html,js}
Spróbuj czegoś takiego grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
to -isprawia, że sprawa jest niewrażliwa
.za pomocą końcowych chcesz zacząć od aktualnego katalogu, to może być podstawiony dowolnym katalogu.
te -rśrodki to zrobić rekurencyjnie, aż drzewie katalogów
-ndrukuje numer wiersza dla meczów.
--includeumożliwia dodawanie nazw plików, rozszerzeń. Akceptowane są symbole wieloznaczne
Więcej informacji można znaleźć pod adresem : http://www.gnu.org/software/grep/
-lopcji (po prostu wypisz nazwy plików, które pasują) zamiast-n
findje i grepdla ciągu:
Spowoduje to znalezienie wszystkich plików Twojego 3 typów w / start / path i grep dla wyrażenia regularnego '(document\.cookie|setcookie)'. Podziel na 2 wiersze z ukośnikiem odwrotnym tylko dla czytelności ...
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)" /dirna katalogu wagi ~ 500Gb.
Brzmi jak idealny do pracy greplub może ack
Albo ta wspaniała konstrukcja:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
-exec grep...jest lepsze niż moja xargsmetoda, ponieważ nie dusi się spacjami w nazwach plików.
find . -type f -print0 | xargs -0 -I {} grep "search_string" {}. Oczywiście można również dodać inne opcje.
Aby dołączyć jeszcze jedną alternatywę, możesz również użyć tego:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \;
Gdzie:
-regextype posix-extendedmówi findjakiego rodzaju regex się spodziewać-regex "^.*\.(php|html|js)$"mówi, findże samo wyrażenie regularne nazwy plików muszą być zgodne-exec grep -EH '(document\.cookie|setcookie)' {} \;mówi, findaby uruchomić polecenie (z jego opcjami i argumentami) określone między -execopcją a \;dla każdego znalezionego pliku, gdzie {}oznacza, gdzie ścieżka pliku przechodzi w tym poleceniu.
podczas
Eopcja mówi, grepaby użyć rozszerzonego wyrażenia regularnego (do obsługi nawiasów) i ...HOpcja nakazuje grepwypisać ścieżki plików przed dopasowaniami.Biorąc to pod uwagę, jeśli chcesz tylko ścieżki do plików, możesz użyć:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \; | sed -r 's/(^.*):.*$/\1/' | sort -u
Gdzie
|[potok] wyślij wynik findpolecenia do następnego polecenia po tym (czyli sedwtedy sort)ropcja mówi, sedaby użyć rozszerzonego wyrażenia regularnego.s/HI/BYE/każe sedzamienić każde pierwsze wystąpienie (w wierszu) „HI” na „BYE” i ...s/(^.*):.*$/\1/mówi mu, aby zastąpić wyrażenie regularne (^.*):.*$(co oznacza grupę [ element ujęty przez ()] obejmującą wszystko [ .*= jeden lub więcej dowolnego znaku] od początku wiersza [ ^] do „pierwszego”: „po czym następuje cokolwiek do„ końca line [ $]) przez pierwszą grupę [ \1] zastąpionego wyrażenia regularnego.umówi sortowi, aby usunął zduplikowane wpisy (wybierz sort -ujako opcjonalne).... DUŻO od najbardziej eleganckiego sposobu. Jak powiedziałem, moim zamiarem jest zwiększenie zakresu możliwości (a także przedstawienie pełniejszych wyjaśnień na temat niektórych narzędzi, których możesz użyć).