【发布时间】:2021-07-02 23:17:33
【问题描述】:
我想用sed (Oracle-Linux/Bash) 就地编辑文件。
两个搜索标签之间的内容(以“#”-cmets 的形式)应该被注释掉。
例子:
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
下面的命令已经实现了,但是它还在search-tags前面放了一个comment+blank:
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 表达式 #1, char 56: 命令后的多余字符
我需要这些 SearchTag 保持原样,因为之后我再次需要它们。
【问题讨论】: