如何使用 sed 在 AIX 中注释掉 rc.tcpip 中的 snmpmibd 和 snmpd?

如何使用 sed 在 AIX 中注释掉 rc.tcpip 中的 snmpmibd 和 snmpd?

我需要注释掉 /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 代表替换的文本。您可以分别匹配这两行,或者注意省略(以牺牲清晰度为代价的简洁)并使用。由于模式包含斜杠,因此请使用另一个字符作为分隔符,例如。由于是一个过滤器,您需要将输出写入一个新文件,然后将新文件移动到位(将输出重定向到与输入相同的文件是行不通的:它会首先删除旧文件,然后开始从现在为空的文件中读取)²。^#&snmpdsnmpmibdmibsnmp\(mib\)\{0,1\}d!sedsed

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

相关内容