제공되는 문서:
$ cat CronConfig
`FILE SYSTEM`
`------------`
warningThreshold: 77
criticalThreshold: 99
`MEMORY`
`-------`
warningThreshold: 66
criticalThreshold: 88
`CPU`
`----`
intervalCount: 6
intervalSecs: 7
warningThreshold: 99
criticalThreshold: 88
CronConfig
위 내용이 포함된 파일이 있습니다. warningThreshold
합계 값을 바꾸고 criticalThreshold
다음과 같은 출력을 원합니다.
필요한 파일:
`FILE SYSTEM`
`------------`
warningThreshold: 11
criticalThreshold: 22
`MEMORY`
`-------`
warningThreshold: 66
criticalThreshold: 88
`CPU`
`----`
intervalCount: 6
intervalSecs: 7
warningThreshold: 99
criticalThreshold: 88
답변1
sed
뒤에 오는 내용 warningThreshold:
이나 그 이후의 내용을 제거 criticalThreshold:
하고 원하는 숫자로 바꾸면 쉽게 이 작업을 수행할 수 있습니다 .
sed -e '/FILE SYSTEM/,/^$/ {' \
-e 's/^[[:blank:]]*\(warningThreshold:\).*/\1 11/' \
-e 's/^[[:blank:]]*\(criticalThreshold:\).*/\1 22/' \
-e '}' CronConfig >CronConfig.new
또는 동등하게,
sed '/FILE SYSTEM/,/^$/ {
s/^[[:blank:]]*\(warningThreshold:\).*/\1 11/
s/^[[:blank:]]*\(criticalThreshold:\).*/\1 22/
}' CronConfig >CronConfig.new
\( ... \)
경쟁그리고 캡처\1
문자열을 대체 텍스트로 사용할 수 있도록 하는 괄호 안의 문자열입니다 .
이 ^[[:blank:]]*
표현식을 사용하면 줄에 초기 공백이나 탭이 있을 수 있습니다.
FILE SYSTEMS
이 두 가지 교체는 문자열과 일치하는 줄과 다음 빈 줄(즉, 파일의 첫 번째 부분) 사이의 줄에 대해서만 수행됩니다.
답변2
$ awk '
!NF { f = 0 }
/FILE SYSTEM/ { f = 1 }
f && /warningThreshold/ { $2 = 11 }
f && /criticalThreshold/ { $2 = 22 }
1' file
`FILE SYSTEM`
`------------`
warningThreshold: 11
criticalThreshold: 22
`MEMORY`
`-------`
warningThreshold: 66
criticalThreshold: 88
`CPU`
`----`
intervalCount: 6
intervalSecs: 7
warningThreshold: 99
criticalThreshold: 88