여러 값을 가진 여러 파일을 찾고 있습니다.
예를 들어: 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, --match만 해당
일치하는 줄의 일치하는(비어 있지 않은) 부분만 인쇄하며, 각 부분은 별도의 출력 줄에 표시됩니다.
그래서 이것은 당신이 원하는 것을 해야 합니다
grep -f filename.txt -R -H -o /home/*
-H
항상 파일 이름을 인쇄하기 위해 (-with-filename) 도 추가했습니다 .