文本文件中有很多行,我想将值更改true
为false
使用一行脚本。
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:
awk '/online =/{c++} c==3{gsub("true","false")}1' test.txt
这将匹配所有出现的online =
并递增计数器标志c++
;当发现3个出现时c==3
,则更换真的和错误的。