여러 패턴을 grep하고 일치하는 패턴을 사용하여 결과를 인쇄합니다.

여러 패턴을 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, --match만 해당

일치하는 줄의 일치하는(비어 있지 않은) 부분만 인쇄하며, 각 부분은 별도의 출력 줄에 표시됩니다.

그래서 이것은 당신이 원하는 것을 해야 합니다

grep -f filename.txt -R -H -o /home/*

-H항상 파일 이름을 인쇄하기 위해 (-with-filename) 도 추가했습니다 .

관련 정보