我需要注释掉 /etc 内 rc.tcpip 文件中的一个条目
# 启动 snmpmibd 守护进程
start /usr/sbin/snmpmibd "$src_running"# 启动简单网络管理协议 (SNMP) 守护进程
start /usr/sbin/snmpd "$src_running"
我如何使用评论这些行sed
?
答案1
要注释掉以 开头的行start /usr/sbin/snmpmibd
,请在替换文本中使用带有锚点和s
模式的命令,其中 plus 代表替换的文本。您可以分别匹配这两行,或者注意省略(以牺牲清晰度为代价的简洁)并使用。由于模式包含斜杠,因此请使用另一个字符作为分隔符,例如。由于是一个过滤器,您需要将输出写入一个新文件,然后将新文件移动到位(将输出重定向到与输入相同的文件是行不通的:它会首先删除旧文件,然后开始从现在为空的文件中读取)²。^
#
&
snmpd
snmpmibd
mib
snmp\(mib\)\{0,1\}d
!
sed
sed
sed -e 's!^start /usr/sbin/snmpmibd !#&!' -e 's!^start /usr/sbin/snmpmibd !#&!' </etc/rc.tcpip >/etc/rc.tcpip.new
mv /etc/rc.tcpip.new /etc/rc.tcpip
要就地编辑文件,您可以使用编辑而不是 sed。
ed -s /etc/rc.tcpip <<'EOF'
g!^start /usr/sbin/snmpd ! s/^/#/
g!^start /usr/sbin/snmpmibd ! s/^/#/
w
q
EOF
¹ AIX 没有\?
or\|
运算符,只启动了 BRE,所以\(snmpmibd\|snmpd\)
不起作用。
² AIX sed 没有-i
,这是一个 GNU 扩展。
答案2
感谢 Gilles 对 AIX sed 不允许 -i 的评论
注释行
sed 's/^[[:space:]]*[^#]/#&/' /etc/rc.tcpip > /tmp/rc.tcpip
cat /tmp/rc.tcpip /etc/rc.tcpip
rm /tmp/rc.tcpip
可以/yourRegExFilterPattern/
在之前添加要选择的在线过滤器s
:
sed '/start/ s/^[[:space:]]*[^#]/#&/' /etc/rc.tcpip > /tmp/rc.tcpip
cat /tmp/rc.tcpip /etc/rc.tcpip
rm /tmp/rc.tcpip
或者,在复杂的过滤器上更有效但可读性较差(这里的简单过滤器不是这种情况start
)
sed 's/^[[:space:]]*start/#&/' /etc/rc.tcpip > /tmp/rc.tcpip
cat /tmp/rc.tcpip /etc/rc.tcpip
rm /tmp/rc.tcpip
取消注释行(需要直接过滤模式以避免取消注释真实注释)
sed '/YourSelectionPattern/ s/^\(^[[:space:]]*\)#/\1/' /etc/rc.tcpip > /tmp/rc.tcpip
cat /tmp/rc.tcpip /etc/rc.tcpip
rm /tmp/rc.tcpip
如果您不是 root,您可能需要额外的权限才能修改此文件,因此 asudo
是关键。
我还建议制作之前的备份副本,/etc/rc.tcpip
以防万一。
答案3
在 中,通过运行命令/etc/rc.tcpip
注释掉该条目:snmpd
chrctcp -d snmpd