여러 값을 가진 여러 파일을 grep하려고 합니다.
예를 들어: grep -f filename.txt /home/* -R
(filename.txt에는 여러 값이 포함되어 있습니다)
하지만 어떤 파일에 어떤 값이 포함되어 있는지 알아야 합니다.
예를 들어: /home/blah.txt에는 value1이 포함되고, /home/aaa.txt에는 value2가 포함됩니다.
어떤 제안이 있나요?
답변1
에서 제공하는 일부 플래그를 사용하여 이를 수행할 수 있습니다 grep
.
다음 명령을 시도해 볼 수 있습니다.
grep -R -f filename.txt /home/*
파일 내의 모든 패턴을 검색하여 filename.txt
홈 폴더 내의 모든 파일과 반복적으로 일치시킵니다. 다음과 같은 출력을 얻게 됩니다.
#here my filename contains the entries bash and Bingo
$grep -R -f filename.txt /home/*
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:awk -v RS=END_WORD '/Bingo1/ && /Bingo2/' test2.txt | grep -o 'Pokeman.*'
grep
파일 이름과 패턴이 포함된 전체 줄이 출력됩니다.
발견된 패턴만 표시하려면 다음 명령을 시도하십시오.
#here the -o flag only displays the matched values, and -n adds the line number
$grep -R -o -n -f test /home/*
/home/user/.bash_history:128:bash
/home/user/.bash_history:156:bash
/home/user/.bash_history:193:Bingo
답변2
이는 귀하의 상황에 적합합니다.
grep -HRnF '<pattern>' . --include "<file_name>"
따라서 .txt로 끝나는 모든 파일에서 'test'라는 단어를 검색하려면 다음과 같이 사용하십시오.
grep -HRnF 'test' . --include "*.txt"
답변3
GNU grep
에는 다음 옵션이 있습니다 -o
.
-o, --only-매칭
일치하는 줄의 일치하는(비어 있지 않은) 부분만 인쇄하고, 각 부분은 별도의 출력 줄에 표시합니다.
그래서 이것은 당신이 원하는 것을 해야 합니다
grep -f filename.txt -R -H -o /home/*
-H
참고 파일 이름을 항상 인쇄하기 위해 (-with-filename) 도 추가했습니다 .