SEDを無視して交換

SEDを無視して交換

テキストファイルに多くの行があるので、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本物そして間違った

関連情報