두 개의 파일이 있습니다(빈 줄/공백/탭 없음).
/tmp/모두
aa
bb
cc
hello
SearchText.json
xyz.txt
/tmp/필수
SearchText.json
내가 원하는 최종 출력은 다음과 같습니다. (/tmp/all의 모든 흔하지 않은 줄)
aa
bb
cc
hello
xyz.txt
나는 다음 명령을 시도했습니다 :-
# comm -23 /tmp/required /tmp/all
SearchText.json
# comm -23 /tmp/all /tmp/required
aa
bb
cc
hello
SearchText.json
xyz.txt
# comm -13 /tmp/all /tmp/required
SearchText.json
# comm -13 /tmp/required /tmp/all
aa
bb
cc
hello
SearchText.json
xyz.txt
# grep -vf /tmp/all /tmp/required
# grep -vf /tmp/required /tmp/all
aa
bb
cc
hello
SearchText.json
xyz.txt
# comm -23 <(sort /tmp/all) <(sort /tmp/required)
aa
bb
cc
hello
SearchText.json
xyz.txt
답변1
대안으로 다음을 comm
고려하십시오.grep
:
grep -vxFf /tmp/required /tmp/all
이를 위해서는 () 줄이 () 파일에 존재하지 않아야 합니다 /tmp/all
. 어떤 줄도 정규식으로 해석되지 않도록 "고정 문자열" 플래그를 추가했습니다. 또한 전체 입력 줄이 의 줄과 일치하도록 강제하기 위해 해당 옵션을 사용합니다.-v
-f
/tmp/required
/tmp/all
-F
/tmp/all
/tmp/required
-x
이 방법에는 정렬된 입력이 필요하지 않습니다.
comm -23 <(sort ...) <(sort ...)
"SearchText.json" 줄이 일치하면 명령이 작동할 것 같지 않습니다.정확히두 파일 모두에 포함됩니다(후행 공백이 있는 경우 동일한 수).