Я не использую Ubuntu регулярно, но как насчет этого:
$ apt-get -s --no-download dist-upgrade -V | grep '=>' | awk '{print$1}'
Он печатает один пакет в строке. Как описано вman apt-get
:
-V, --verbose-versions
Show full versions for upgraded and installed packages. Configuration Item: APT::Get::Show-Versions.
$ 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
Вы можете легко сделать это с помощью 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
и следующей пустой строке (, т.е. в первом разделе вашего файла ).