이 sed 명령은 "rocommunity"라는 단어가 포함된 줄을 삭제합니다.
sed -i '/rocommunity/d' snmpd.conf
rocommunity hedona 127.0.0.1
rocommunity hedona linux1
rocommunity hedona linux12
rocommunity hedona linux13
rocommunity hedona linux15
rocommunity hedona linux16
rocommunity hedona linux17
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink linux76 parshedona
rocommunity가 포함된 행(127.0.0.1이 포함된 행 제외)을 제거하기 위해 sed를 어떻게 업데이트합니까?
예상 출력:
rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink linux76 parshedona
답변1
두 가지 검색을 결합하면 됩니다.
sed '/rocommunity.*127\.0\.0\.1/p;/rocommunity/d' /path/to/input
/rocommunity.*127\.0\.0\.1/p
- rocommunity
for 와 일치하는 줄에서 해당 127.0.0.1
줄을 인쇄합니다.
/rocommunity/d
- 일치하는 줄에서는 rocommunity
인쇄하지 않습니다.
다른 모든 내용은 인쇄됩니다.
파일을 변경하려면 file 원하는 작업을 확인한 후 를 sed --in-place
사용하여 파일을 변경할 수 있습니다.
답변2
$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in >data.out
이 sed
명령은 먼저 각 줄의 기본 인쇄를 끈 다음( -n
) 두 가지 편집 명령( -e
)을 사용합니다. 첫 번째는 해당 단어가 포함된 행을 인쇄 rocommunity
한 다음 127.0.0.1
해당 행의 다음 단어를 인쇄합니다. 두 번째 편집 명령은 포함되지 않은 모든 행을 인쇄합니다 rocommunity
.
질문 시작 부분의 데이터:
$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in
rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink linux76 parshedona
답변3
"rocommunity"와 "127.0.0.1" 브랜치가 끝까지 일치하면. 그리고 그 줄을 인쇄할 것이다.
sed -e '/rocommunity{/127\.0\.0\.1/b' -e 'd;}' file
GNU 구현을 사용하면 sed
다음과 같이 단축할 수 있습니다.
sed '/rocommunity/{/127\.0\.0\.1/b;d}' file