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사용하고 대체 텍스트를 나타냅니다. 두 줄을 개별적으로 일치시키거나 생략 된 (명확성을 희생하여 간결함) 1 및 를 사용할 수 있습니다 . 패턴에 슬래시가 포함되어 있으므로 와 같은 다른 문자를 구분 기호로 사용하세요 . 필터이므로 출력을 새 파일에 쓴 다음 새 파일을 제자리로 이동해야 합니다( 입력 과 동일한 파일로 출력을 리디렉션하면 작동하지 않습니다. 먼저 이전 파일을 삭제하고, 그런 다음 현재 비어 있는 파일에서 읽기를 시작하세요)².s^#&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 에는 GNU 확장이 없습니다 .-i

답변2

-i를 허용하지 않는 AIX sed에 대한 의견을 주신 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

관련 정보