Linux 根据第一列的值删除条目

Linux 根据第一列的值删除条目,linux,shell,Linux,Shell,如果第一列中有354921524701,则删除该条目: 样本数据: 18106|1.0.4.0/22 3549|1.0.10.0/24 5413|1.0.0.0/16 2152|1.4.0.0/16 3549|1.0.8.0/22 4701|1.0.0.0/8 加速输出: 18106|1.0.4.0/22 5413|1.0.0.0/16 如何实现这一点?要使模式仅在第一个字段上匹配,必须将表达式锚定到行的开头: grep -v -E '^(3549|2152|4701)\|' ^标记行的开

如果第一列中有354921524701,则删除该条目:

样本数据:

18106|1.0.4.0/22
3549|1.0.10.0/24
5413|1.0.0.0/16
2152|1.4.0.0/16
3549|1.0.8.0/22
4701|1.0.0.0/8
加速输出:

18106|1.0.4.0/22
5413|1.0.0.0/16

如何实现这一点?

要使模式仅在第一个字段上匹配,必须将表达式锚定到行的开头:

grep -v -E '^(3549|2152|4701)\|'
^
标记行的开头(而
$
将标记行的结尾)

-E
激活增强型正则表达式,这样您就不必对管道和圆括号进行转义,
\
而-v则反向搜索(只返回不匹配的行)

^匹配行的开头,然后用圆括号括起管道符号标记可选项(3549、2152或4701),而
\\\124;
表示管道符号本身,第一个字段以该符号结尾,需要用反斜杠转义,因此它不会被视为另一个可选项


注意在其周围使用单引号,否则shell本身将解释一些特殊字符。

使用grep/egrep非常简单。你在坚持什么?我试着用grep-v来做,但是我如何定义它只在第一个字段中起作用?