如何用sed删除匹配的行

时间:2019-03-05 09:49:53

标签: regex bash shell sed

输入:

titi;0;1;2;3;1;4;5;6;7
toto;0;1;2;3;1;4;5;6;7
dada;0;1;2;3;0;4;5;6;7

如何删除包含以下内容的行 0是在第5个分号之后了吗?

预期输出:

titi;0;1;2;3;1;4;5;6;7
toto;0;1;2;3;1;4;5;6;7

4 个答案:

答案 0 :(得分:2)

Awk比sed更好地处理基于列的内容:

awk -F';' '$6' file

答案 1 :(得分:2)

如果必须使用sed:

sed -Ei '/^([^;]*;){5}0/d' file.txt
  • -E用于扩展正则表达式
  • -i就地
  • 结尾的d告诉sed如果前面的模式匹配,则删除行
  • 模式用斜杠括起来,表示第5个分号后为 0

答案 2 :(得分:0)

您可以尝试使用分号作为分隔符的awk

awk -F";" ' $6!=0 { print } ' input_file

使用您的输入

$ cat bitbyte.txt
titi;0;1;2;3;1;4;5;6;7
toto;0;1;2;3;1;4;5;6;7
dada;0;1;2;3;0;4;5;6;7

$  awk -F";" ' $6!=0 { print } ' bitbyte.txt
titi;0;1;2;3;1;4;5;6;7
toto;0;1;2;3;1;4;5;6;7

$

答案 3 :(得分:0)

请您尝试以下。

awk -F';' '$6==0{next} 1'  Input_file