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

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

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

    想要修改 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
        1
    param   2017-06-25 03:05:16 +08:00 via Android
        2
    DiamondbacK   2017-06-25 08:29:13 +08:00   ♥ 1
    文本的第一行进入模式空间,匹配到 /\s\+host1.localdomain$/,所以执行 d 命令,任何时候 d 命令都会结束当前模式空间的处理,读取文本的下一行。因为已经是最后一行,所以脚本结束。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1077 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 18:31 · PVG 02:31 · LAX 10:31 · JFK 13:31
    ♥ Do have faith in what you're doing.