テキストファイルに多くの行があるので、1行のスクリプトを使用して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
最初の2行は変更せず、3行目だけを変更したいと思います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
これはすべてのオカレンスを一致させ、3つのオカレンスが見つかるとonline =
カウンタフラグをインクリメントします。c++
c==3
本物そして間違った。