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"
변수를add
awk로 설정합니다./^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