V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
billlee
V2EX  ›  编程

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

  •  
  •   billlee · 2017-06-25 00:11:45 +08:00 · 5250 次点击
    这是一个创建于 2716 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想要修改 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 条回复    2017-06-25 08:29:13 +08:00
    param
        1
    param  
       2017-06-25 03:05:16 +08:00 via Android
    DiamondbacK
        2
    DiamondbacK  
       2017-06-25 08:29:13 +08:00   ❤️ 1
    文本的第一行进入模式空间,匹配到 /\s\+host1.localdomain$/,所以执行 d 命令,任何时候 d 命令都会结束当前模式空间的处理,读取文本的下一行。因为已经是最后一行,所以脚本结束。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1528 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:18 · PVG 01:18 · LAX 09:18 · JFK 12:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.