awk - 如何用 SED (bash) 替换 2 个标签之间的内容?
问题描述
我想用sed
(Oracle-Linux/Bash)就地编辑文件。
2 个搜索标签之间的内容(以“#”-comments 的形式)应该被注释掉。
例子:
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 表达式 #1,char 56:命令后的额外字符
我需要这些 SearchTag 保持原样,因为之后我再次需要它们。
解决方案
如果ed
可用/可接受。
printf '%s\n' 'g/#NORMAL_LISTENER_START/+1;/#NORMAL_LISTENER_END/-1s/^/#/' ,p Q | ed -s file.txt
如果您对输出和就地编辑感到满意,请更改
Q
为。w
删除
,p
如果您不想看到输出。
推荐阅读
- javascript - 为什么div里面有溢出:隐藏;div 没有占据其内容的全部宽度?
- laravel - 来自 api 的 Laravel 5.6 Ajax 自动完成
- html - 为什么浏览html文件后显示空白结果?
- node.js - context.done 在处理程序“graphql”中调用了两次
- php - 从重复的键值对创建 php 数组
- django - 从Django中的视图中删除对象
- javascript - User.ReadBasic.All 范围未授予,v2
- git - 在 git 存储库中处理项目(文件夹)而无需克隆整个存储库?胃肠道
- javascript - Discord.js 错误 = “消息未定义”
- kotlin - 如何在 Kotlin 中创建列表?