8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

删除与模式匹配的第一行

Bob Ray 2月前

28 0

如何使用 sed 仅删除包含特定模式的第一行?例如,我想从此文档中删除与 FAA 匹配的第一行:1. foo bar quuz2. foo FAA bar(此

如何使用 sed 仅删除包含特定模式的第一行?

例如我想 FAA 从此文档中删除第一行匹配:

1. foo bar quuz
2. foo FAA bar (this should go)
3. quuz quuz FAA (this should remain)
4. quuz FAA bar (this should also remain)

结果应该是

1. foo bar quuz
3. quuz quuz FAA (this should remain)
4. quuz FAA bar (this should also remain)

非常感谢 POSIX sed 的解决方案,GNU sed 也可以。

帖子版权声明 1、本帖标题:删除与模式匹配的第一行
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Bob Ray在本站《regex》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 使用 GNU sed 您可以使用以下习惯用法:

    sed '0,/FAA/{/FAA/d}' input.txt
    

    它将删除操作应用于从文件开头到第一次出现的范围 FAA ,并仅删除该行。

  • 0 不符合 posix 标准(无法在我的 AIX 上运行),但在可用时是最佳操作线路

  • 我发现这是一个非常好的答案,非常有用。如果您阅读 sed 手册页中的“地址”部分,您会更加欣赏它。

  • 这可能对你有用(GNU sed):

    sed -n '/FAA/{:a;n;p;ba};p' file
    

    打印所有行,直到遇到 FAA ,然后跳过该行并打印所有后续行到文件末尾。

  • sed '1 {/FAA/ d;};1,/FAA/ {/FAA/d;}' YourFile
    

    第一行出现 FAA 的情况需要进行特殊测试(否则需要进行第一次出现和下一次出现)

    另一种选择

    sed '/FAA/ !b
       N;s/.*\n//
    :end
       N
       $ p
       b end' YourFile
    
  • 有趣的是,我在评论@hek2mgl 的答案后立即看到了这个答案。sed 有 0 个地址。可以更轻松地解决这个问题。

  • tav 2月前 0 只看Ta
    引用 8

    我认为在特殊情况下,您的 1{...} 部分,您需要以某种方式执行下一步。否则,如果 #1 和 #2 行都有 FAA,则两条行都将被删除。

  • braX 2月前 0 只看Ta
    引用 9

    @Kent 是正确的,请尝试 printf \'1. a FAA\n2. b FAA\n3. cc dd\n\' | sed -e '1 {/FAA/ d;};1,/FAA/ {/FAA/d;}'。仅显示第 3 行。

  • 奇怪的是,我尝试在 AIX 上使用 print 和 echo,结果两者都取第二行,而不是预期的第一行。因此在 AIX 上,sed 不会在第一行之后进入第二部分(如果 /FAA/ occr 在第一行),但其他系统会在第一行之后进入循环。您能尝试使用 --posix(在 GNU sed 上)吗?

  • 引用 11

    awk 很简单:

    awk '!f && /FAA/ {f=1;next}1' file
    1. foo bar quuz
    3. quuz quuz FAA (this should remain)
    4. quuz FAA bar (this should also remain)
    
  • 使用 GNU sed

    sed '0,/FAA/{//d}' file
    

    详细信息 => info sed

  • 有趣的是,sed '1,/.../{//d}' 文件会产生错误!我也相信这只适用于 GNU sed。

返回
作者最近主题: