find . -type f -print -exec cat {} \; | grep some string
위의 명령은 파일 경로를 인쇄하지 않습니다.
사용하고 있습니다 : Ubuntu, bash 4
.
ack
아마도 특정 파일 형식 만 필터링, 현재 디렉토리 아래의 모든 파일을 통해 grep을 할 수 있습니다.
find . -type f -print -exec cat {} \; | grep some string
위의 명령은 파일 경로를 인쇄하지 않습니다.
사용하고 있습니다 : Ubuntu, bash 4
.
ack
아마도 특정 파일 형식 만 필터링, 현재 디렉토리 아래의 모든 파일을 통해 grep을 할 수 있습니다.
답변:
grep
파일 이름을 포함하는 텍스트 스트림을 제공하기 때문 입니다. grep에 대한 인수로 파일 이름을 제공하지 않았으므로 일치하는 행의 파일을 추론 할 수 없습니다. 사용 xargs
:
find . -type f -print | xargs grep "some string"
GNU find / xargs가 있으므로 xargs가 파일 이름을 읽는 것이 더 안전한 방법입니다.
find . -type f -print0 | xargs -0 grep "some string"
일치하는 줄을 표시하지 않고 일치하는 줄이있는 파일 이름 만 원하는 경우 :
find . -type f -print0 | xargs -0 grep -l "some string"
sed '...' $(find ... | xargs grep -l ...)
나는 사용한다
grep "some string" . -R
그리고 그것은 더 빨리 작동
추신
더 복잡한 사용 사례
grep -HiRE "some string|other string" . #H for file printing, i for case-insensitive, R for recursive search, E for regex
param i 설명을 읽으려면
grep --help | grep -- -i
-n
줄 번호를 원한다면. 간단한 답변을 위해 +1.
종종 복잡한 폴더 구조에서 소스 코드를 검색하고 다음을 사용하여 유용합니다.
cd /your/folder/
grep -rHino "your string"
이러한 매개 변수 를 사용하면 find 사용하지 않고 파일 전체 경로 와 지정된 문자열 이 포함 된 줄 번호 를 얻습니다 .
rHino 와 같은 검색을 통해 BASH가 발생 하기 때문에 기억하기도 쉽습니다. :)
나는 이것이 빠른 예제와 어떻게 작동하는지 보여줄 것이다.
cat을 사용하여 파일의 내용을 표시합시다 :
jeeves ~ # cat fw.stop
#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
문자열 "iptables -P"를 포함하는 모든 파일을 재귀 적으로 검색해 보겠습니다.
jeeves ~ # grep -rinHo "iptables -P"
fw.stop:9:iptables -P
fw.stop:10:iptables -P
fw.stop:11:iptables -P
출력에서 볼 수 있듯이 filename : hit row : searched string
사용 된 매개 변수에 대한 자세한 설명은 다음과 같습니다.
-r 각 디렉토리 피연산자에 대해 해당 디렉토리의 모든 파일을 반복적으로 읽고 처리하십시오. 명령 행에서 기호 링크를 따르되, 재귀 적으로 발생하는 심볼릭 링크는 건너 뜁니다. 파일 피연산자가 제공되지 않으면 grep은 작업 디렉토리를 검색합니다. 이것은 '--directories = recurse'옵션과 동일합니다.
-i 각 일치에 대한 파일 이름을 인쇄하십시오. 검색 할 파일이 둘 이상인 경우 이것이 기본값입니다.
-n 입력 파일 내에서 각 출력 행 앞에 1 기반 행 번호를 붙입니다. (-n은 POSIX에 의해 지정됩니다.)
-H 각 일치에 대한 파일 이름을 인쇄하십시오. 검색 할 파일이 둘 이상인 경우 이것이 기본값입니다.
-o 일치하는 행의 일치하는 (비어 있지 않은) 부분 만 인쇄합니다. 각 부분은 별도의 출력 행에 있습니다. 출력 행은 입력과 동일한 분리 문자를 사용하며 -z (-null-data)도 사용되는 경우 분리 문자는 널 바이트입니다 (기타 옵션 참조).
Silver Searcher 는 파일과 콘텐츠를 검색 할 수있는 매우 빠르고 편리한 유틸리티입니다.
문제를 해결하기 위해 silver searcher 명령은 다음과 같습니다.
ag 'some string' -l
-l
일치하는 파일 이름 만 인쇄하십시오 (일치하는 줄은 인쇄하지 마십시오)
find . -type f -fprint /dev/stderr -exec cat {} \; | grep some string