sed/awk を使用して特定の列の内容を置き換える

sed/awk を使用して特定の列の内容を置き換える

提供される文書:

$ 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つの置換は、文字列に一致する行と次の空行(つまりファイルの最初の部分)の間の行に対してのみ行われます。

おすすめ記事