SED 忽略后替换

SED 忽略后替换

文本文件中有很多行,我想将值更改truefalse使用一行脚本。

bash-3.2$ grep online test.txt
# online = false --> ONE SHOT import (delete all table contents before importing)
# online = true  --> DIFFERENTIAL import (import without clean the table contents)
online =  true

我试过这个

sed -i.bak '/DIFFERENTIAL\|/ONE SHOT\/!s/online.*/online = false/g'

但它给出了这个错误:

sed: -e expression #1, char 17: unknown command: `O'

我不想改变前两行,只希望第三行online = true变成online = false。它可以位于文件中的任何位置,但会匹配online =。所以我希望我的命令忽略 1 和 2 并仅更改 3。

答案1

如果您只想更改以 开头的行online,那么这样做可能是最简单的:

sed 's/^online\ *=.*/online = false/g'

这样,以 开头的行将#被完全忽略。

@mikeserv 建议的一个更简单(但不相同)的替代方案:

sed '/^online/s/true/false/'

答案2

通过:

awk '/online =/{c++} c==3{gsub("true","false")}1' test.txt

这将匹配所有出现的online =并递增计数器标志c++;当发现3个出现时c==3,则更换真的错误的

相关内容