搜索行并替换行

搜索行并替换行
false###File.txt 
many rows
###online = false --> ONE SHOT import (delete all table contents before importing)
###online = true  --> DIFFERENTIAL import (import without clean the table contents)
###online = true

many rows

我想选择仅在线的行并将 true 替换为 false 但它不必是第 3 行,它可以出现在文件中的任何位置

我的尝试:test.sh

online=true
perl -i -p -e "s/^(online[ ]*=[ ]*).*$/\1 $online/" File.txt 

它完成了这项工作,但在 false 之前添加了一个空格。有人可以更正上面的命令,以便它不会在单词 true 之前添加空格

答案1

你可以试试sed

sed -i '3s/true/false/' file.txt

如果您想将原始文件保留为file.txt.bak

sed -i.bak '3s/true/false/' file.txt

此外,如果您想在同一行中替换多个出现的truewith :false

sed -i.bak '3s/true/false/g' file.txt

编辑:根据您澄清的查询,请尝试以下操作:

sed -i.bak '/DIFFERENTIAL\|[^t][^r][^u][^e]$/!s/true/false/' file.txt

这将在没有“DIFFERENTIAL”的行以及行末尾出现“true”的行中将“true”替换为“false”。

答案2

我发现以下命令可以帮助我:

sed '/DIFFERENTIAL/!s/true/false/g'

相关内容