답변:
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
문자열 :
이것은 / starting / path에서 3 가지 유형의 모든 파일을 찾고 정규 표현식에 대해 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 weigth 디렉토리에서 5 ~ 8 배 이상 빠릅니다 .
완벽한 직업 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
"BYE"와 함께 "HI"의 (라인마다)마다 처음 나타나는 대체 ...s/(^.*):.*$/\1/
정규식을 대체하도록 지시 (^.*):.*$
의미 ( 그룹 [둘러싸인 물건 ()
포함] 모든 [ .*
더 어떤 문자의 = 하나] 라인의 시작을 [ ^
]까지 '첫 번째': '다음에 무엇 까지' 의 끝 대체 된 정규식 $
의 첫 번째 그룹 [ \1
]으로 줄 [ ]) .u
정렬하여 중복 항목을 제거하도록 지시합니다 ( sort -u
선택 사항으로 사용).... 가장 우아한 방법이 아닙니다. 내가 말했듯이, 내 의도는 가능성의 범위를 늘리는 것 (그리고 사용할 수있는 도구에 대한 자세한 설명을 제공하는 것)입니다.