![在文件中指定行的开头插入注释](https://linux22.com/image/203749/%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8C%87%E5%AE%9A%E8%A1%8C%E7%9A%84%E5%BC%80%E5%A4%B4%E6%8F%92%E5%85%A5%E6%B3%A8%E9%87%8A.png)
这是一个相当新手的问题,但我想做的应该很简单:( 我正在开发一个脚本来自动安装开发环境,但我需要loadmodule
在我的 Linux 机器上的 Apache 配置文件中注释掉。
LoadModule mpm_event_module modules/mod_mpm_event.so
我已经能够使用以下命令删除评论:
sudo sed -i '66s/.//' /etc/httpd/conf/httpd.conf
答案1
插入评论:
sed 's/^ *LoadModule/#&/' /etc/httpd/conf/httpd.conf
删除评论:
sed '/^ *# *LoadModule/s/#//' /etc/httpd/conf/httpd.conf
或者也删除空格:
sed '/^ *# *LoadModule/s/^ *# *//' /etc/httpd/conf/httpd.conf
仅在特定行号上应用替换(插入或删除)(如果您尝试开发脚本来执行自动安装,这不是一个好主意):
# Apply on line 66 only
sed '66ba;p;d;:a /^ *# *LoadModule/s/^ *# *//' /etc/httpd/conf/httpd.conf
或者(相同,但也-e
可以使其移植到其他sed
):
sed -e '66ba' -e 'p;d;:a' -e ':a' -e '/^ *# *LoadModule/s/^ *# *//' /etc/httpd/conf/httpd.conf
或者
sed '66{/^ *# *LoadModule/s/^ *# *//}' /etc/httpd/conf/httpd.conf
要仅编辑固定行号而不应用匹配:
# Insert comment on line 66
sed '66s/^/#/' /etc/httpd/conf/httpd.conf
# Remove comment on line 66
sed '66s/^#//' /etc/httpd/conf/httpd.conf
# Remove spaces too
sed '66s/^ *# *//' /etc/httpd/conf/httpd.conf
这些将把配置文件处理为:
(插入)
LoadModule foo
LoadModule bar
(消除):
#LoadModule foo
#LoadModule bar
# LoadModule baz
# LoadModule bax
答案2
你也可以使用 Vim 来做到这一点:
vim -c '/LoadModule/s/^/#/|x' httpd.conf