如何通过逻辑运算过滤文件行?使用 awk/sed/grep?

问题描述 投票:0回答:1

我想像这样过滤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

但是我想知道是否有更好更短的东西?

awk sed grep
1个回答
0
投票

删除所有有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
  • 获取带有模式 1 且无模式 2 的线条
    /pattern1/ && !/pattern2/
  • 使用否定
    !( ... )
    排除这一行
© www.soinside.com 2019 - 2024. All rights reserved.