Bash 스크립트에서 이 여러 줄 패턴을 어떻게 일치시키고 바꿀 수 있습니까?

Bash 스크립트에서 이 여러 줄 패턴을 어떻게 일치시키고 바꿀 수 있습니까?

파일이 있는데 jail.local다음과 같은 섹션이 있습니다.

[apache]

enabled = true
logpath = /var/log/apache/error.log

[ssh]

enabled = false
port = ssh

나는 원해요

  • 일치 문자열 [ssh]합계
  • 아래 문자열 2줄에서 교체를 수행합니다. 즉, 변경
    • enabled = false도착하다
    • enabled = true

그래서 새로운 텍스트는

[ssh]

enabled = true
port = ssh

나는 사용법을 보았지만 이 문제를 해결하는 데 필요한 명령이 오히려 "줄당" 지향적이라는 것을 sed이해할 수 없습니다 . 이 교체 작업을 수행하려면 어떻게 해야 합니까?sed

답변1

GNU sed 사용:

sed -e '/\[ssh\]/,+2{s/false/true/}' file

POSIX sed 사용:

sed -e '/\[ssh\]/n;n;s/false/true/' file

관련 정보