
텍스트 파일의 폴더 트리가 있고 하위 문자열의 인스턴스와 해당 파일의 이름을 찾고 싶습니다.
내가 다음과 같은 일을 한다면:
find . | xargs cat | grep 'abc'
그러면 하위 문자열의 인스턴스를 찾을 수 있지만 원래 있던 파일은 찾을 수 없습니다.
도와주셔서 감사합니다!
답변1
이렇게 실행하면 xargs cat
파일 이름이 손실되며 데이터가 파이프를 통해 흐르는 동안 파이프에 전달할 수 있는 좋은 방법이 없습니다.
그러나 grep -l
일치하는 문자열이 있는 파일 이름이 나열되므로 다음을 사용할 수 있습니다.
find . -type f | xargs grep -l hello
또는 디렉터리를 재귀적으로 검색하면 grep -r
공백이나 따옴표가 포함된 파일 이름 문제도 해결할 수 있습니다.xargs
grep -lre abc .
파일 이름뿐만 아니라 일치하는 문자열도 원하는 경우 -l
일반적인 grep
동작을 얻으려면 제거하십시오. 를 사용하면 -r
명령줄에 경로를 제공하더라도 일치하는 파일 이름을 인쇄해야 합니다.
답변2
xargs
중복됩니다. xargs cat | grep
이렇게 하면 grep
모든 파일의 연결된 내용이 포함된 이름 없는 입력 스트림만 표시됩니다. 로 변경:
find . -type f -exec grep -H 'abc' {} +
이는 파일별로 호출됩니다( 여러 파일을 인수로 호출하여 grep
인스턴스 수를 최소화합니다 ).grep
grep
답변3
find ./ -type f -exec grep -H abc {} \;
또는
grep -R 'abc' ./
답변4
awk
대신에 cat
시도 하고grep
find . -type f | xargs awk '/abc/{printf "%s is from %s\n", $0, FILENAME}'
아니면 그냥 사용 find
하고awk
find . -type f -exec awk '/abc/{printf "%s is from %s\n", $0, FILENAME}' {} +