我正在组装一些Bash配置脚本来配置Linux服务器,我希望能够对文件中所有未注释的行进行注释,但保留空白/空行,保持原样。
使用the great answer to this question,我能够想出一个运行良好的Sed衬里:
sed -e '/^#/!s/\(.*\)/# \1/g' /etc/update-motd.d/90-updates-available当然,当我在生产设置上运行这个Sed命令时,-e将与-i交换以写入文件,但无论如何,该文件的内容将被注释掉,如下所示:
#!/bin/sh
#
# if [ -x /usr/lib/update-notifier/update-motd-updates-available ]; then
# exec /usr/lib/update-notifier/update-motd-updates-available
# fi但是,理想情况下,我希望输出是这样的;请注意一个空白/空行是如何保持不变的。
#!/bin/sh
# if [ -x /usr/lib/update-notifier/update-motd-updates-available ]; then
# exec /usr/lib/update-notifier/update-motd-updates-available
# fi在Sed中有什么方法可以做到吗?
发布于 2016-01-24 23:03:32
这个怎么样:
sed -e 's/^\([^#].*\)/# \1/g' /etc/update-motd.d/90-updates-available发布于 2016-01-24 23:02:32
将s的地址从/^#/!扩展到/^\(#.*\)\?$/! (以#开头的行,或不包含任何内容)。
另一种方式,在awk中
awk '$0 && $0 !~ /^#/ {printf "# "}1'这会将#添加到不为空且不以#开头的每一行。
https://stackoverflow.com/questions/34982602
复制相似问题