【问题标题】:how to delete matching lines with sed [closed]如何使用 sed 删除匹配行 [关闭]
【发布时间】:2019-03-05 09:49:53
【问题描述】:

给定输入:

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

【问题讨论】:

  • 你有什么尝试吗?
  • 嗨!如果您在问题中添加您到目前为止使用的命令以及结果如何,将会有所帮助。

标签: regex bash shell sed


【解决方案1】:

如果你必须用 sed 来做:

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

【讨论】:

  • 这正是我想要的 sed 正则表达式,谢谢你
【解决方案2】:

在处理基于列的内容方面,Awk 比 sed 更好:

awk -F';' '$6' file

【讨论】:

  • 3Q awk 更好
  • @JamesBrown 我应该是“3Q=谢谢”。
【解决方案3】:

请您尝试关注一下。

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

【讨论】:

    【解决方案4】:

    您可以尝试使用分号作为分隔符的 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
    
    $
    

    【讨论】:

    • 感谢您的回答,我会试试的,* 是错误的,它不存在于该行中,我重新编辑问题
    • 我也更新了答案
    • 谢谢,它有效
    • 太棒了!.. 请考虑接受答案
    最近更新 更多