我正在整理一些 Bash 配置脚本来配置 Linux 服务器,我希望能够注释文件中所有未注释的行,但保留空白/空行不变且保持不变。
使用这个问题的出色答案,我能够想出这个运行良好的 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 中有什么办法可以做到这一点吗?
这个怎么样:
sed -e 's/^([^#].*)/# 1/g' /etc/update-motd.d/90-updates-available
将
s
的地址从 /^#/!
扩展到 /^(#.*)?$/!
(以 #
开头的行,或不包含任何内容)。
另一种方式,在awk
:
awk '$0 && $0 !~ /^#/ {printf "# "}1'
这会向不为空且不以 #
开头的每一行添加#
。