使用comm utility(假设bash作为外壳):
comm -13 <(sort file1) <(sort file2)
注意输入必须如何排序才能工作,所以你的增量也将被排序。
comm 使用(交错的)3 列布局:
- 第 1 列:仅在 file1 中的行
- 第 2 列:仅在 file2 中的行
- 第 3 列:两个文件中的行
-13 抑制第 1 列和第 2 列,这仅打印 file2 独有的值。
警告:要被识别为两个文件共有的行,它们必须完全匹配 - 看似相同空格不同的行(如撰写本文时问题中的示例数据中的情况,其中file1 行有一个尾随空格)将不匹配。
cat -et 是一个可视化行尾和控制字符的命令,有助于诊断此类问题。
例如,cat -et file1 将输出诸如id1 $ 之类的行,从而明显地在行尾有一个尾随空格(表示为$)。
如果您不想清理file1,而是想按原样比较文件,请尝试:
comm -13 <(sed -E 's/ +$//' file1 | sort) <(sort file2)
从两个文件的行中修剪前导和尾随空格的通用解决方案:
comm -13 <(sed -E 's/^[[:blank:]]+|[[:blank:]]+$//g' file1 | sort) \
<(sed -E 's/^[[:blank:]]+|[[:blank:]]+$//g' file2 | sort)
注意:上述sed 命令需要GNU 或BSD sed。
编辑:我只想更改 1 个字符,但最少 6 个...删除此...