grep
저는 Unix를 처음 접했고 searchlist.txt라는 텍스트 파일에 저장된 패턴을 사용하여 텍스트 파일 목록을 작성하는 방법을 이해하려고 합니다 . 텍스트 파일은 다음과 같이 줄 바꿈으로 구분된 이름 목록입니다.
"워싱턴, 마사"
"아담스, 제인"
매우 큰 텍스트 파일에서 이 이름을 검색해야 합니다. 대소문자도 무시해야 합니다. 알아냈지만 grep -i -f searchlist.txt *.txt
내가 얻는 유일한 출력은 다음과 같습니다.
"아담스, 제인": "워싱턴, 마사"
나는 이 이름들이 텍스트 파일 어딘가에 있을 것이라고 확신합니다. searchlist.txt 형식을 지정하는 데 필요한 특정 방법이 있는지 궁금합니다. 목록이 개행 문자로 구분되도록 명령에 어떻게든 지정해야 합니까?
답변1
다음 내용을 포함하는 "needles"라는 파일이 있는 경우:
washington, martha
adams, jane
다음 내용을 포함하는 "haystack"이라는 파일도 있습니다.
blah blah blah washington, martha blah
all work and no play
makes adams, jane a dull
girl
를 사용할 수 있어야 합니다 grep -i -f needles haystack
.
그러나 "바늘"에 다음이 포함된 경우:
"washington, martha"
"adams, jane"
grep -i -f <(sed 's/"//g' needles) haystack
이름에서 큰따옴표를 제거하려면 를 사용해야 합니다 . 인용된 이름만 검색하려는 경우가 아니라면.
물론 이것은 "건초더미" 상황에서는 작동하지 않습니다.
And on that day she changed her name to adams,
jane.
목록에 있는 누군가가 Artists Used to Be Called Princes에서 영감을 받아 실제 이름에 큰따옴표를 추가하기로 결정한 경우 이름을 좀 더 sed
명확하게 만들고 시작 부분만 제거하고 각 줄을 따옴표로 끝낼 수 있습니다 grep -i -f <(sed 's/^"//;s/"$//' needles) haystack
.