ライン検索とライン置換

ライン検索とライン置換
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

また、同じ行に複数回表示されるwithを置き換えるには、次の手順を実行しますtruefalse

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」に置き換えられます。

おすすめ記事