我想像这样过滤a.txt文件:
删除所有具有模式 1 但不具有模式 2 的行。 保留所有带有模式 1 和模式 2 的行,仅包含模式 2,不包含模式 1 和模式 2。
想法是这样的:
grep -v 'pattern1 && !(pattern2)' a.txt
或者用另一种方式来描述我想做的事情:
A NAND !B
我想我可以做到这一点:
grep pattern1 a.txt | grep -v pattern2 | tee lines_to_remove.txt
comm -13 lines_to_remove.txt a.txt | tee a_filter.txt
但是我想知道是否有更好更短的东西?
删除所有有pattern1但没有pattern2的行
$ cat file
1 pattern1
2 pattern2
3 pattern1 pattern2
4 pattern2 pattern1
$ awk '!(/pattern1/ && !/pattern2/)' file
2 pattern2
3 pattern1 pattern2
4 pattern2 pattern1
/pattern1/ && !/pattern2/
!( ... )
排除这一行