grep을 파일 및 추가 정규식과 결합하는 방법

grep을 파일 및 추가 정규식과 결합하는 방법

각 줄마다 문자열 파일이 있습니다.

예를 들어:

AAAAA   
BBBBB   
CCCCC  
etc  

특정 디렉터리의 일련의 파일에 각 문자열이 존재하는지 하나씩 확인하고 싶습니다.

나는 내가 할 수 있는 일이 무엇인지 알고 있습니다. grep -f filename바로 검색을 하는 것입니다. 하지만 나에게 필요한 것은 더 구체적인 결과를 얻으려면 한 줄에 하나 이상의 정규식을 사용하는 것입니다. 문자열을 포함하는 파일은 크기가 크고 자주 변경되므로 표현식을 추가하기 위해 각 줄을 수정하는 것은 의미가 없습니다.

따라서 나에게 필요한 것은 grep -f filename파일의 각 줄을 반복하면서(그리고 파일에서 이를 grep하면서) 더 많은 조건을 추가하는 것입니다. 예 AAAAA를 들어그리고 [0-9]{1,3}$같은 줄에도 존재합니다.

답변1

grep파이프라인을 사용하여 이 단계를 단계별로 수행 할 수 있습니다.

grep -f your_file list_of_files|grep -E extra_condition

또는

while read line; do
    grep -E -e "$line" -e extra_condition list_of_files
done < your_file

두 경우 모두 -E다음 형식(예: 숫자 수량자 포함)의 패턴을 사용하려면 [0-9]{1,3}$전환해야 합니다 .

편집하다

Drav Sloan의 의견 덕분에 우리는 두 번째 버전(loop while)을 다음과 같이 단순화할 수 있을 뿐만 아니라

grep -E -e "extra_condition" -f your_file list_of_files

하지만 실제로는 패턴을 찾습니다.또는다른 하나는 패턴이 아니다그리고또 다른. 첫 번째 형식을 고수해야 합니다.

답변2

awkand 를 사용하는 다른 방법을 보여주기 위한 것입니다 grep.

견본

$ cat patterns.txt 
AAAA
BBBB
CCCC
DDDD
EEEE

$ cat sample.txt 
AAAA 1
AAAA 2
AAAA 3
AAAA 4
DDDD 1
DDDD 2
YYYY 1
YYYY 2

이상한 #1:

$ awk 'FNR==NR{a[$0]; next}($1 in a)' patterns.txt sample.txt | grep -E "[0-9]{1,3}$"
AAAA 1
AAAA 2
AAAA 3
AAAA 4
DDDD 1
DDDD 2

조정이 필요할 가능성이 높지만 조정 방법을 묻는 메시지가 표시됩니다.

이상한 #2:

$ awk 'FNR==NR{a[$0];next};{for (i in a){if (match($0,i)) print}}' patterns.txt sample.txt | grep -E "[0-9]{1,3}$"
AAAA 1
AAAA 2
AAAA 3
AAAA 4
DDDD 1
DDDD 2

이는 더 유연하며 샘플 데이터 행 내 어디에서나 패턴 문자열을 처리할 수 있습니다.

관련 정보