grep을 사용하여 한 .txt 문서의 줄이 다른 문서에 나타나는지 비교하는 방법은 무엇입니까?
또한, 반대의 경우를 찾기 위해 grep을 어떻게 사용합니까? 그럴 수 있을까 grep -v
?
답변1
grep -F -f inner_file outer_file
설명서의 매개변수 설명GNU grep:
-F
,--fixed-strings
패턴을 개행 문자로 구분된 고정된 문자열 목록으로 해석하며, 어느 문자열이든 일치합니다. (
-F
POSIX에서 지정)
-f file
,--file=file
한 줄에 하나씩 파일에서 패턴을 가져옵니다. 빈 파일에는 패턴이 0개 포함되어 있으므로 일치하는 항목이 없습니다. (
-f
POSIX에서 지정)
다음 옵션을 사용할 수도 있습니다 -x
.
-x
,--line-regexp
전체 행과 정확히 일치하는 일치 항목만 선택합니다. (
-x
POSIX에서 지정)
-v
반대 결과를 알아보는 옵션을 추가합니다 .
-v
,--invert-match
일치하지 않는 행을 선택하려면 일치의 의미를 반대로 합니다. (
-v
POSIX에서 지정)
빠른 테스트를 위해 Bash 셸을 사용하세요.
# grep -F -f <(printf 'A\nZ\n') <(printf 'A\nB\nC\n')
A
# echo $?
0
# grep -F -f <(printf 'A\nZ\n') <(printf 'B\nC\n')
# echo $?
1
# grep -v -F -f <(printf 'A\nZ\n') <(printf 'B\nC\n')
B
C
# echo $?
0
# grep -x -F -f <(printf 'A\nZ\n') <(printf 'AA\nBB\nCC\n')
# echo $?
1
답변2
귀하와 비슷한 것을 테스트한 결과 다음과 같은 결론에 도달했습니다.
cat sampleOne.txt | cat sampleTwo.txt | grep <pattern>
예를 들어 텍스트 파일에 다음과 같은 내용을 썼습니다.
This is a test.
1111
2222
내가 구체적으로 "이것은 테스트입니다"를 찾을 때 나는 다음을 사용했습니다.
cat *.txt | grep "This is a test."
This is a test.
This is a test.
또는
cat sampleOne.txt && cat sampleTwo.txt | grep "This is a test."
결과:
This is a test.
11111
22222
This is a test.
심지어
cat sampleOne.txt | cat sampleTwo.txt | grep "This is a test"
이것은 나에게 다음을 제공합니다:
This is a test.
물론 이 명령은 grep -v pattern
찾고 있는 패턴의 반대 패턴을 찾습니다. 예를 들어
cat *.txt | grep -v "This is a test."
나에게 줄 것입니다 :
11111
22222
11111
22222