이 명령을 사용하여 파일에서 여러 단어를 찾습니다.
grep -iE "(foo|bar|test|something)" filename.txt
이것은 잘 작동하지만 발견된 단어의 모든 항목을 찾습니다. 예를 들어, foo
8번 발견되면 8개의 결과가 모두 표시됩니다.
고유한 결과만 표시할 수 있나요? 어쩌면 첫 번째 것을 보여줄 수도 있습니다.
답변1
첫 번째 일치 항목만 표시하는 옵션이 있습니다. 관찰하다:
$ grep -iE "(foo|bar|test|something)" filename.txt
Foo 1
Bar 2
foo 3
Foo 4
이제 첫 번째 일치 항목으로 제한하려면 다음을 추가하세요 -m1
.
$ grep -iEm1 "(foo|bar|test|something)" filename.txt
Foo 1
한 가지 제한 사항은 첫 번째 foo
및 첫 번째 bar
등이 아닌 첫 번째 일치만 표시한다는 것입니다.
여러 가지 일치 항목 중 첫 번째 항목을 인쇄합니다.
다음 테스트 파일을 고려해보세요.
$ cat filename.txt
Foo 1
Bar 2
foo 3
Foo 4
test 5
test 6
표시된 세 가지 정규식 각각의 첫 번째 항목을 인쇄하려면 다음을 수행하십시오.
$ awk -v a='[fF]oo [bB]ar [tT]est' 'BEGIN{split(a,b," ")} {for (i in b) if ($0~b[i] && !c[i]) {print; c[i]++}}' filename.txt
Foo 1
Bar 2
test 5
이는 일치시키려는 정규 표현식을 변수에 넣어 수행됩니다 a
. a
단어로 분할되어 배열에 배치됩니다 b
. 의 각 정규식은 b
각 줄에 대해 테스트되며 각 줄의 첫 번째 일치 항목만 인쇄됩니다.