리눅스에서 특정 문자열을 포함하고있는 파일을 찾고 싶습니다. 나는 무언가를 시도했지만 성공할 수 없었다 :egrep을 사용하여 문자열이 들어있는 파일을 찾는 방법
find. -name * .txt | egrep을의 mystring에
리눅스에서 특정 문자열을 포함하고있는 파일을 찾고 싶습니다. 나는 무언가를 시도했지만 성공할 수 없었다 :egrep을 사용하여 문자열이 들어있는 파일을 찾는 방법
find. -name * .txt | egrep을의 mystring에
여기서 파일 이름 (find command
의 출력)을 egrep에 입력합니다. 실제로 파일 내용에 대해 egrep을 실행하려고합니다.
find . -name "*.txt" -exec egrep mystring {} \;
또는
find . -name "*.txt" -print0 | xargs -0 egrep mystring
확인 find command help는 하나의 인수가 무엇을 확인하는 더 나은 : 여기
는 대안의 커플.egrep
으로 작동하지
시도 :
find . -name '*.txt' | xargs egrep mystring
버전 두 가지 문제가있다 : 첫째
, *.txt
먼저 쉘에 의해 확장됩니다, 현재 디렉토리에 당신에게 파일의 목록을 제공하는이 예를 들어 .txt
으로 끝나면 다음과 같이 표시됩니다.
[[email protected]:~]$ ls *.txt
test.txt
[[email protected]:~]$
find
명령은 find . -name test.txt
이됩니다. 그냥 설명하기 위해 다음을 시도해보십시오
[[email protected]:~]$ echo find . -name *.txt
find . -name test.txt
[[email protected]:~]$
는 둘째,
egrep
이
STDIN
에서 파일 이름을지지 않습니다. 그들을 사용해야하는 인수로 변환하려면
xargs
나는 또한 다음과 같은 패턴을 둘러싸는 제안 - 셸이 패턴 매칭을하지 못하도록하기 위해 따옴표로 묶습니다. –
이러한 포괄적 인 답변을 제공 해주신 모든 분들께 감사드립니다. – Tolga
find . -name *.txt | egrep mystring
*.txt
파일은 단지 경로이다 find . -name *.txt
의해 생성되는 출력 내에 mystring
를 검색한다.
find . -name *.txt | xargs egrep mystring
당신은
find . -iname *.txt -exec egrep mystring \{\} \;
를 사용할 수 있습니다 여기에 ERROR
로 시작하는 라인을 가지고 모든 *.log
파일의 파일 경로를 반환하는 예이다 :
대신 xargs
을 사용할 수 있습니다 :
find . -name "*.log" -exec egrep -l '^ERROR' {} \;
당신은 단지 파일 이름을 원하는 경우
이것은 작동하지 않습니다. -R 옵션은 인수 목록에 제공된 경우에만 디렉토리로 순환됩니다. 이 경우 해당 디렉토리의 모든 파일은 .log로 끝나는 파일뿐만 아니라 읽을 수 있습니다. 이 방법으로 성공하면 쉘이 * .log를 분석하기 때문에 현재 디렉토리에 .log로 끝나는 파일이 있기 때문입니다. –
아마도'egrep -R '패턴 "--include = *. log .'? – moala
egrep -R "pattern" *.log
을 사용할 수 있습니다 egrep을 재귀 옵션 :
find . -type f -name '*.txt' -exec egrep -l pattern {} \;
당신이 원하는 경우 파일 이름과 일치 :
find . -type f -name '*.txt' -exec egrep pattern {} /dev/null \;
첫 번째 명령 끝에'\ +'또는'\;'가 누락되었습니다. – spatz
mystring에서 파일 이름을 찾으려고 시도하지 않았습니까? 내 생각 엔 그가 다른 방향으로 찾고있는 것 같아. – Kevin
@spatz : 발언에 감사 드리며, 나는 그 예를 고쳤다. –