gpt4 book ai didi

sed n 似乎不像我想象的那样工作

转载 作者:行者123 更新时间:2023-12-01 09:10:00 25 4
gpt4 key购买 nike

我试图复制我在这里找到的一个例子:http://www.grymoire.com/Unix/Sed.html#uh-35a

这是 sed 模式

/^begin$/,/^end$/{
/begin/n
/end/!d
}

这是第一个文件

begin
one
end
last line

这是第二个

begin
end
last line

当我在第一个文件上运行 sed 时,它删除了开始/结束之间的内容,一切正常。当我第二次运行它时,它似乎错过了“结束”并删除了文件的其余部分。

在第一个文件上运行

$ sed -f x.sed a
begin
end
last line

第二个运行

$ sed -f x.sed b
begin
end

注意第二次运行时“最后一行”是如何丢失的。

我认为“n”会打印当前模式并吸入下一个模式。然后它会点击/end/命令并处理它。

事实上,它似乎以某种方式导致范围的末端被错过。有人会解释发生了什么吗?

最佳答案

应该是:

/^begin$/,/^end$/{
/^begin$\|^end$/!d
}

为什么你的命令是错误的?

n 命令在那里是错误的。在第二个示例中,它将:

  1. begin ---> n 读下一行(重要:这不影响范围地址(begin,end)的状态)

    1a. end ---> /end/! 不适用。不要删除行

  2. 最后一行 ---> /end/! 适用。删除该行。 (sed 仍在搜索包含 end 的行,因为 n 命令跳过了该行)

关于sed n 似乎不像我想象的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com