내 컴퓨터 중 일부에는 sysctl.conf에 다음 설정 블록이 있습니다(숫자는 컴퓨터마다 다릅니다).
#Size Of RAM (In GB): 23
kernel.shmmni= 2547
kernel.shmmax= 365482458
kernel.shmall= 25471984
#kernel.sem=<SEMMSL> <SEMMNS> <SEMOPM> <SEMMNI>
kernel.sem= 325 12496852 74 3654
kernel.msgmni= 1204
kernel.msgmax= 57452
kernel.msgmnb= 74235
이 블록의 위치는 때때로 다양합니다. 이러한 이전 설정을 제거하고 새 구성을 삽입하는 bash를 작성하고 싶습니다. sysctl.conf이므로 안전하게 수행해야 합니다. sed
또는 를 사용하여 해당 블록을 삭제 grep
하고 이 블록만 삭제되도록 하려면 어떻게 해야 합니까 ?
답변1
파일에서 다음 줄이 나타나는 유일한 위치인 경우:
sed '/#Size Of RAM (In GB): 23/,/kernel.msgmnb/d' /etc/sysctl.conf
블록 사이의 모든 내용(블록의 첫 번째 줄과 마지막 줄 포함)을 검색하여 삭제합니다. Size
파일의 다른 곳에 나타날 경우를 대비하여 작은 문자열이 아닌 첫 번째 줄 전체를 포함했습니다 . kernel.msgmnb
당신이 말했듯이 나도 그것을 사용했습니다. 다른 컴퓨터에서는 숫자가 다릅니다.
이 명령은 변경 사항을 표준 출력으로 보내므로 원하는 변경 사항이 적용되었는지 확인할 수 있습니다. 그렇다면 스위치를 추가하여 파일을 그 자리에서 편집할 수 있습니다 -i
.
sed -i '/#Size Of RAM (In GB): 23/,/kernel.msgmnb/d' /etc/sysctl.conf