我正在整理一些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做到这一点?
答案 0 :(得分:2)
这个怎么样:
sed -e 's/^\([^#].*\)/# \1/g' /etc/update-motd.d/90-updates-available
答案 1 :(得分:1)
将s
的地址从/^#/!
扩展为/^\(#.*\)\?$/!
(以#
开头的行,或不包含任何内容的行。)
另一种方式,在awk
:
awk '$0 && $0 !~ /^#/ {printf "# "}1'
这会将#
添加到非空的每一行,而不是以#
开头。