gpt4 book ai didi

awk - SED 在删除后不处理 {} 中的多个命令)、追加)或更改)

转载 作者:行者123 更新时间:2023-12-04 21:33:38 24 4
gpt4 key购买 nike

sed 应该在匹配模式后处理多个命令,这些命令在大括号中给出,如 {cmd1;cmd2;cmd3} .但是在下面给定的代码中,d(elite) 之后的所有命令都将被忽略。

脚本文件

s/^\(interface GigabitEthernet0\)$/\1\/0/
/interface GigabitEthernet0\/0$/{
n # process next line = 1st line (after match) to be deleted
d # Should delete '1st line (after match) to be deleted'
n # process next line = 2nd line to be altered
s/2nd line to be altered/2ND LINE AFTER ALTERATION/
n
s/3rd line to be altered/3RD LINE AFTER ALTERATION/
}

输入文件
interface GigabitEthernet0
1st line (after match) to be deleted
2nd line to be altered
3rd line to be altered
4th line stays unchanged

sed -i -f 脚本.sed 示例.txt

预期输出:
interface GigabitEthernet0/0
2ND LINE AFTER ALTERATION
3RD LINE AFTER ALTERATION
4th line stays unchanged

有效输出:
interface GigabitEthernet0/0
2nd line to be altered
3rd line to be altered
4th line stays unchanged

如上面的输出所示,行 要删除的第一行(匹配后)已被有效删除。但是以下所有行(第 2、第 3、第 4 行)都不会被替换。

顺便说一句:像 a(ppend) 或 c(hange) 这样的命令的行为方式相同;所有跟随的命令都将被忽略。

最佳答案

正如 POSIX sed specification 中所述, 命令 d 删除模式空间并开始下一个循环。

我稍微调整了您的脚本以获得所需的输出:

/^interface GigabitEthernet0$/{
s//&\/0/
n
N
s/.*\n//
s/2nd line to be altered/2ND LINE AFTER ALTERATION/
n
s/3rd line to be altered/3RD LINE AFTER ALTERATION/
}

它有效,但也向我们表明 sed 不是这项工作的正确工具。因此,正如 Ed 建议的那样,使用 反而。

关于awk - SED 在删除后不处理 {} 中的多个命令)、追加)或更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56208911/

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