sedを使用して複数のパターンを一致させ、その一部を変更する方法

sedを使用して複数のパターンを一致させ、その一部を変更する方法

私のファイルには次の行があります。

SUT_INST_PIT=true
SUT_INST_TICS=true
SUT_INST_EXAMPLES=false
SUT_INST_PING=false

パターンと一致し、SUT_INST_EXAMPLESSUT_INST_PING設定されたsed行をどのように生成しますか?falsetrue

フェンスでも変えたくないのでfalse簡単に交換することはできません!trueSUT_INST_PITSUT_INST_TICS

今2つのsedコマンドが実行されていますが、1行だけが必要です!

sed -i "s/SUT_INST_EXAMPLES=false/SUT_INST_EXAMPLES=true/g" <file>
sed -i "s/SUT_INST_PING=false/SUT_INST_PING=true/g" <file>

もう1つのことは、その行で->または->をsedパラメータ化できるはずですが、&のみパラメータ化できるはずです。falsetruetruefalseSUT_INST_EXAMPLESSUT_INST_PING

ソリューション(@RomanPerekhrestに準拠)と送信(スクリプトの見積もり)でそれを使用するには:

send "sed -i 's\/^\\(SUT_INST_EXAMPLES\\|SUT_INST_PING\\)=false\/\\1=true\/' file\r"

答え1

sed方法:

sed -i 's/^\(SUT_INST_EXAMPLES\|SUT_INST_PING\)=false/\1=true/' file

fileコンテンツ:

SUT_INST_PIT=true
SUT_INST_TICS=true
SUT_INST_EXAMPLES=true
SUT_INST_PING=true

\(SUT_INST_EXAMPLES\|SUT_INST_PING\)- 代替グループ、文字列の先頭でSUT_INST_EXAMPLESOR一致SUT_INST_PING


選ぶ愚かなGNU awk)方法:

gawk -i inplace -F'=' -v OFS='=' '$1~/^SUT_INST_(EXAMPLES|PING)/{$2=($2=="false")? "true":"false"}1' file

答え2

次のように簡単に切り替えることができます。

sed -i -E '/^SUT_INST_(PING|EXAMPLES)=/{s/false/true/;t;s/true/false/;}' infile

これは現在の値trueに変更されるか、false現在の値に基づいて変更されます。falsetrue

答え3

sed各行で複数の操作を実行できます。

sed -e '...' -e '...' file

したがって、少なくとも2つのsed通貨を1つにまとめることができます。

sed -i -e 's/^SUT_INST_EXAMPLES=false/SUT_INST_EXAMPLES=true/' \
       -e 's/^SUT_INST_PING=false/SUT_INST_PING=true/' file

置換をパラメータ化するには、変数を使用します。

examples="true"
ping="false"

sed -i -e "s/^SUT_INST_EXAMPLES=.*\$/SUT_INST_EXAMPLES=$examples/" \
       -e "s/^SUT_INST_PING=.*\$/SUT_INST_PING=$ping/" file

上記は、無条件SUT_INST_EXAMPLESおよび値をそれぞれおよび値SUT_INST_EXAMPLESに設定します。$examples$ping

関連情報