使用grep从列表中删除所有出现的两个值

时间:2018-10-06 18:08:51

标签: bash awk sed grep

我在文件中有一个列表,其中包含范围在1到66000之间的数字。我想对所有数字进行grep,并排除数字80和443。例如,可以确定1080为4431。

3 个答案:

答案 0 :(得分:2)

尝试一下:

grep -Pv '(^|[^0-9])(80|443)($|[^0-9])' file

这将打印所有不包含80和443的行,这些行由非数字字符或行的开头/结尾包围。

$ cat file
port 332
port 4443
port 80
port 8080
port 443
332 port
4443 port
80  port
8080 port
443 port
$ grep -Pv '(^|[^0-9])(80|443)($|[^0-9])' file
port 332
port 4443
port 8080
332 port
4443 port
8080 port

答案 1 :(得分:1)

这可以做到:

egrep -v '^(80|443)$' yourfile

这将打印文件中不完全由80443组成的所有行。

答案 2 :(得分:0)

为补充约瑟夫的答案,已弃用egrep,而推荐使用grep,因此答案最好表示为:

grep -Ev '^(80|443)$' yourfile

编辑:如果每行上还有其他信息,例如"80"blah 80 blah,并且您也想排除这些行,则可以改用字边界(\b^$

grep -Ev '\b80\b|\b443\b' yourfile