여러 패턴을 grep하고 일치 패턴으로 결과를 인쇄합니다.

여러 패턴을 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, --only-매칭

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

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

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

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

관련 정보