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
그 사례 insensitlve한다
은 .
당신이 당신의 현재 디렉토리에서 시작하려는 마지막 수단으로, 이것은 임의의 디렉토리로 대체 될 수있다.
이 -r
방법은 디렉토리 트리 바로 아래에서 재귀 적으로 수행합니다.
은 -n
경기의 줄 번호를 출력합니다.
은 --include
당신이 확장 파일 이름을 추가 할 수 있습니다. 와일드 카드 허용
자세한 내용은 다음을 참조 하십시오 : http://www.gnu.org/software/grep/
답변
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)'
답변
완벽한 직업 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
“BYE”와 함께 “HI”의 (라인마다)마다 처음 나타나는 대체 …s/(^.*):.*$/\1/
정규식을 대체하도록 지시(^.*):.*$
의미 ( 그룹 [둘러싸인 물건()
포함] 모든 [.*
더 어떤 문자의 = 하나] 라인의 시작을 [^
]까지 ‘첫 번째’: ‘다음에 무엇 까지’ 의 끝 대체 된 정규식$
의 첫 번째 그룹 [\1
]으로 줄 [ ]) .u
정렬하여 중복 항목을 제거하도록 지시합니다 (sort -u
선택 사항으로 사용).
… 가장 우아한 방법이 아닙니다. 내가 말했듯이, 내 의도는 가능성의 범위를 늘리는 것 (그리고 사용할 수있는 도구에 대한 자세한 설명을 제공하는 것)입니다.