gpt4 book ai didi

awk - 如何用 SED (bash) 替换 2 个标签之间的内容?

转载 作者:行者123 更新时间:2023-12-04 14:55:00 25 4
gpt4 key购买 nike

我想使用 sed (Oracle-Linux/Bash) 就地编辑一个文件。

2 个搜索标签之间的内容(以“#”注释的形式)应该被注释掉。

例子:

Some_Values
#NORMAL_LISTENER_START
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)
(KEY = LISTENER)
)
)
)
#NORMAL_LISTENER_END
Other_Values

应该导致:

Some_Values    
#NORMAL_LISTENER_START
# LISTENER =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = IPC)
# (KEY = LISTENER)
# )
# )
# )
#NORMAL_LISTENER_END
Other_Values

下面的命令已经实现了它,但它还在搜索标签前放置了一个注释+空白:

sed -i "/#NORMAL_LISTENER_START/,/#NORMAL_LISTENER_END/ s/^/# /" ${my_file}

现在我的研究告诉我要排除那些搜索标签,例如:

sed -i '/#NORMAL_LISTENER_START/,/#NORMAL_LISTENER_END/{//!p;} s/^/# /' ${my_file}

但它不会工作 - 结果是以下消息:

sed: -e expression #1, char 56: extra characters after command

我需要那些 SearchTag 保持原样,因为之后我还需要它们。

最佳答案

如果 ed 可用/可接受。

printf '%s\n' 'g/#NORMAL_LISTENER_START/+1;/#NORMAL_LISTENER_END/-1s/^/#/' ,p Q | ed -s file.txt
  • 如果您对输出感到满意,则将 Q 更改为 w 并且将进行就地编辑。

  • 如果您不想看到输出,请删除 ,p

关于awk - 如何用 SED (bash) 替换 2 个标签之间的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68225841/

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