首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Sed只注释掉未注释的行,并100%保留空白/空行?

如何用Sed只注释掉未注释的行,并100%保留空白/空行?
EN

Stack Overflow用户
提问于 2016-01-24 22:56:31
回答 2查看 3.3K关注 0票数 2

我正在组装一些Bash配置脚本来配置Linux服务器,我希望能够对文件中所有未注释的行进行注释,但保留空白/空行,保持原样。

使用the great answer to this question,我能够想出一个运行良好的Sed衬里:

代码语言:javascript
复制
sed -e '/^#/!s/\(.*\)/# \1/g' /etc/update-motd.d/90-updates-available

当然,当我在生产设置上运行这个Sed命令时,-e将与-i交换以写入文件,但无论如何,该文件的内容将被注释掉,如下所示:

代码语言:javascript
复制
#!/bin/sh
# 
# if [ -x /usr/lib/update-notifier/update-motd-updates-available ]; then
#     exec /usr/lib/update-notifier/update-motd-updates-available
# fi

但是,理想情况下,我希望输出是这样的;请注意一个空白/空行是如何保持不变的。

代码语言:javascript
复制
#!/bin/sh

# if [ -x /usr/lib/update-notifier/update-motd-updates-available ]; then
#     exec /usr/lib/update-notifier/update-motd-updates-available
# fi

在Sed中有什么方法可以做到吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-24 23:03:32

这个怎么样:

代码语言:javascript
复制
sed -e 's/^\([^#].*\)/# \1/g' /etc/update-motd.d/90-updates-available
票数 3
EN

Stack Overflow用户

发布于 2016-01-24 23:02:32

s的地址从/^#/!扩展到/^\(#.*\)\?$/! (以#开头的行,或不包含任何内容)。

另一种方式,在awk

代码语言:javascript
复制
awk '$0 && $0 !~ /^#/ {printf "# "}1'

这会将#添加到不为空且不以#开头的每一行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34982602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档