如何从配置文件变量中删除不等于100的变量

如何从配置文件变量中删除不等于100的变量

如何从配置文件中删除变量hadoop.tasklog.totalLogFileSize不等于 100

例子

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
.
.

答案1

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

这会将文件视为=- 分隔字段。如果一行与给定的模式匹配,并且后面的数字=(即第二个字段)不是 100,则跳过该行并且不输出。所有其他行均由1程序末尾的尾随输出(可以用 替换{ print })。

使用sed

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

这会输出所有行,但是当一行与给定模式匹配时,然后执行不是匹配=100在行尾,它会从输入中删除。

相关内容