을 실행하면 grep foo bar.txt
grep은 에서 "foo"의 각 항목을 강조 표시합니다 bar.txt
. 하지만 때로는 grep이 검색하는 파일을 결정하는 데 사용하고 싶습니다 find
. 그래서 저는 다음과 같은 일을 합니다:
find . -iname "*.abc" | xargs grep foo
아니면 이거:
find . -iname "*.abc" -exec grep foo {} \;
두 경우 모두 grep은 지정된 파일에서 "foo" 항목을 올바르게 찾았지만 출력에는 강조 표시가 전혀 없습니다.
find
강조 표시를 잃지 않고 grep에서 검색할 파일을 계속 선택하려면 어떻게 해야 합니까 ?
저는 bash를 쉘로 사용하여 Ubuntu 12.04에서 Gnome Terminal 3.4.1.1을 실행하고 있습니다.
답변1
두 명령 모두에서 문제는 grep
다른 명령이 실제 출력( 각각 xargs
및 find
)을 생성한다는 것입니다.
grep
각 파일 이름을 직접 호출하여 이 문제를 해결할 수 있습니다 .
IFS=$'\n'
for FILE in $(find . -iname "*.abc"); do
grep foo $FILE
done
unset IFS
또는 한 줄로:
IFS=$'\n';for FILE in $(find . -iname "*.abc");do grep foo $FILE;done;unset IFS
작동 방식:
IFS=$'\n'
내부 필드 구분 기호를 개행 문자로 설정합니다(또는 파일 이름의 공백으로 인해 문제가 발생함).for FILE in $(COMMAND); do COMMANDS done
에서 지정한 파일을 반복하고COMMAND
변수를FILE
현재 파일로 설정한 다음 실행합니다COMMANDS
.grep foo $FILE
foo
in을 검색하여$FILE
결과를 보냅니다.곧장화면에.unset IFS
내부 필드 구분 기호를 다시 기본값으로 설정합니다(스크립트에는 필요하지 않음).
답변2
grep
색상을 다시 출력 하면 됩니다 .
나는 여기서 비슷한 일을했습니다.grep에서 일치 항목에 대한 추가 데이터 가져오기