[bash] 주어진 텍스트가 포함 된 파일 찾기

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-extendedfind어떤 종류의 정규 표현식을 기대하는지 알려줍니다.
  • -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선택 사항으로 사용).

… 가장 우아한 방법이 아닙니다. 내가 말했듯이, 내 의도는 가능성의 범위를 늘리는 것 (그리고 사용할 수있는 도구에 대한 자세한 설명을 제공하는 것)입니다.


답변