V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
billlee
V2EX  ›  编程

在 sed 中使用多条命令时,这些命令是按什么顺序执行的?

  •  
  •   billlee · Jun 25, 2017 · 5778 views
    This topic created in 3233 days ago, the information mentioned may be changed or developed.

    想要修改 hosts 文件,比如原文件如下

    192.168.1.1 host1.localdomain
    

    用了一个有两条命令的脚本

    #!/bin/sed -f
    /\s\+host1.localdomain$/d
    $a\
    192.168.1.2 host1.localdomain
    

    结果:一个空文件

    如果把 d 命令移动到 a 后面,反而得到了正确的结果

    192.168.1.2 host1.localdomain
    

    被这个搞晕了,难道 sed 有多条命令的时候是从后往前执行的?

    2 replies    2017-06-25 08:29:13 +08:00
    param
        1
    param  
       Jun 25, 2017 via Android
    DiamondbacK
        2
    DiamondbacK  
       Jun 25, 2017   ❤️ 1
    文本的第一行进入模式空间,匹配到 /\s\+host1.localdomain$/,所以执行 d 命令,任何时候 d 命令都会结束当前模式空间的处理,读取文本的下一行。因为已经是最后一行,所以脚本结束。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2337 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 05:17 · PVG 13:17 · LAX 22:17 · JFK 01:17
    ♥ Do have faith in what you're doing.