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
此外,如果您想在同一行中替换多个出现的true
with :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'