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とを使用し、置換テキストを表す を使用したパターンで コマンドを使用します。2 行を別々に一致させることも、 を省略して (簡潔さを犠牲にして明瞭さを犠牲に) を使用することも できます¹ 。パターンにスラッシュが含まれているため、 のように別の文字を区切り文字として使用します。 はフィルターであるため、出力を新しいファイルに書き込んでから、新しいファイルを所定の場所に移動する必要があります ( の出力を入力と同じファイルにリダイレクトすることはできません。最初に古いファイルを消去してから、空になったファイルから読み取りを開始するためです)²。^#&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

AIX sed が -i を許可しないというコメントをくれた Gilles に感謝します。

行をコメントする

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 

ルート権限がない場合、このファイルを変更するには追加の権限が必要になる可能性があるため、 a がsudo鍵となります。

/etc/rc.tcpip念のため、事前にバックアップコピーを作成しておくことをお勧めします。

答え3

で、次のコマンドを実行してエントリ/etc/rc.tcpipをコメントアウトします。snmpd

chrctcp -d snmpd

関連情報