Замените содержимое определенного столбца на sed/awk.

Я не использую 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.
0
07.05.2020, 18:44
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
1
28.04.2021, 23:15

Вы можете легко сделать это с помощью 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
28.04.2021, 23:15

Теги

Похожие вопросы