在文件中指定行的开头插入注释

在文件中指定行的开头插入注释

这是一个相当新手的问题,但我想做的应该很简单:( 我正在开发一个脚本来自动安装开发环境,但我需要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

相关内容