sip.conf 파일이나 텍스트 기반 파일에서 "nat=no" 문자열 앞에 "allow=alaw" 줄을 추가합니다.

sip.conf 파일이나 텍스트 기반 파일에서 "nat=no" 문자열 앞에 "allow=alaw" 줄을 추가합니다.

sip.conf 파일이나 텍스트 기반 파일에서 "nat = no" 문자열 앞에 "allow = alaw" 줄을 추가합니다. "nat=no" 이전에 "allow=alaw"가 이미 존재하는 경우에는 추가하면 안 됩니다.

문서 내용:

secret =
nat = no
progressinband = yes

allow = ulaw
allow = alaw
nat = no
progressinband = yes

disallow = all
allow = ulaw
nat = no
progressinband = yes

내 시도:

awk '/nat = no/ { if(lastLine == "allow = alaw") { print } } { lastLine = $0 }' sip.conf

답변1

awk -v add="allow = alaw" '/^nat = no$/&&lastLine!=add{print add}{lastLine=$0}1' sip.conf
  • -v add="allow = alaw"변수를 addawk로 설정합니다.
  • /^nat = no$/&&lastLine!=add현재 줄이 정확히 "nat=no"인지 확인하고, 마지막 줄이 추가하려는 줄이 아니면 "allow=alaw"를 확인하세요. 만약 사실이라면,
    • {print add}추가할 라인을 인쇄합니다.
  • {lastLine=$0}현재 행 값을 저장하고 다음 루프에서만 사용합니다.
  • 1현재 줄을 인쇄합니다.

최소한의 예를 들면 다음과 같습니다 sip.conf.

secret =
nat = no
progressinband = yes

allow = ulaw
allow = alaw
nat = no
progressinband = yes

disallow = all
allow = ulaw
nat = no
progressinband = yes
$ awk -v add="allow = alaw" '/^nat = no$/&&lastLine!=add{print add}{lastLine=$0}1' sip.conf > out
$ mv out sip.conf
$ cat sip.conf
secret =
allow = alaw
nat = no
progressinband = yes

allow = ulaw
allow = alaw
nat = no
progressinband = yes

disallow = all
allow = ulaw
allow = alaw
nat = no
progressinband = yes

관련 정보