Linux

如何從配置文件中刪除不等於 100 的變數

  • August 8, 2018

如何從配置文件中刪除不等於 100的變數hadoop.tasklog.totalLogFileSize

例子

more file.conf

hadoop.tasklog.totalLogFileSize=107
hadoop.tasklog.totalLogFileSize=10
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.totalLogFileSize=189
hadoop.tasklog.totalLogFileSize=104
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12
.
.

預期產出

more file.conf

hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12
.
.
$ awk -F= '/hadoop\.tasklog\.totalLogFileSize/ && $2 != 100 { next } 1' file
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12

這會將文件視為=-delimited 欄位。如果一行與給定的模式匹配,並且如果後面的數字=(即第二個欄位)不是 100,則跳過該行並且不輸出。所有其他行由1程序末尾的尾隨輸出(可以替換為{ print })。

使用sed

$ sed '/hadoop\.tasklog\.totalLogFileSize/{ /=100$/!d; }' file
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12

這會輸出所有行,但是當一行匹配給定模式,然後在行尾匹配=100時,它會從輸入中刪除。

引用自:https://unix.stackexchange.com/questions/461225