2023 01 09 更新:
还会有一种特殊情况匹配错误 -w -f 依然出错
用字符串ABC 匹配 ABC,ABC-1,ABC-2
ABC-1,ABC-2 都会被匹配到;
就解决方法,改成完全一样的,vim 中前后加 \t tab
%s#^#\t#g
%s#$#\t#g
然后 grep -f par.lst xxx.bed
血的教训:用 -f 一定要带上 -w ,除非你想局部匹配;
带上-w全词匹配,相当于你的文件内容每行末尾加了 \Z 或者$ 表示末尾的正则。
文件1:
A
B
C
文件2
A
B
B1
B2
B3
C
D
grep -v -f 文件1 文件2
# 结果: D
grep -v -w -f 文件1 文件2
# 结果 B1 B2 B3 D
-v, --invert-match select non-matching lines
-f, --file=FILE obtain PATTERN from FILE
-w, --word-regexp force PATTERN to match only whole words