我需要创建从一个文件读取行的脚本,并检查第二个文件中是否存在该行。如何处理文件中的特殊字符,例如:'、" 和 \?
第一个文件:
a.txt
aa
bb
cc
f
'f'
"g"
'h'
第二个文件:
b.txt
cc
dd
'f'
"g"
g
h
命令:
cat a.txt | xargs -I{} grep -w {} b.txt
返回:
cc
'f'
'f'
"g"
g <- it shouldn't be there
h <- it shouldn't be there
预期的:
cc
'f'
"g"
就我而言,不应列出最后一项 (h),因为 a.txt 文件中不存在此项。只有“h”(单引号)。我该如何通用地处理这个问题,以防止将来发生意外情况?
答案1
这就是该comm
实用程序的用途。一般来说,您可以执行这一行来对输入文件进行排序并将它们提供给comm
.这些-12
选项意味着抑制文件 1 和 2 特有的行,仅显示公共行。
comm -12 <(sort a.txt) <(sort b.txt)
cc
'f'
"g"