Мне нужно закомментировать запись в файле rc.tcpip внутри /etc
# Запустить демон snmpmibd
start /usr/sbin/snmpmibd "$src_running"# Запустить демон простого протокола сетевого управления (SNMP)
start /usr/sbin/snmpd "$src_running"
Как мне прокомментировать эти строки, используя sed
?
решение1
Чтобы закомментировать строки, начинающиеся с start /usr/sbin/snmpmibd
, используйте s
команду с шаблоном, используя ^
якорь и #
в тексте замены, плюс, &
который обозначает заменяемый текст. Вы можете либо сопоставить две строки по отдельности, либо заметить, что 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 нет операторов \?
или \|
, только запущен BRE, поэтому \(snmpmibd\|snmpd\)
не будет работать.
² В AIX sed нет -i
, это расширение GNU.
решение2
Спасибо Жилю за замечание о том, что 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, вам могут потребоваться дополнительные права для изменения этого файла, поэтому sudo
ключ — это a.
Я также рекомендую сделать резервную копию /etc/rc.tcpip
на всякий случай.
решение3
В /etc/rc.tcpip
, закомментируйте snmpd
запись, выполнив команду:
chrctcp -d snmpd