如何使用 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

相關內容