私のファイルには次の行があります。
SUT_INST_PIT=true
SUT_INST_TICS=true
SUT_INST_EXAMPLES=false
SUT_INST_PING=false
パターンと一致し、SUT_INST_EXAMPLES
にSUT_INST_PING
設定されたsed行をどのように生成しますか?false
true
フェンスでも変えたくないのでfalse
簡単に交換することはできません!true
SUT_INST_PIT
SUT_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
パラメータ化できるはずですが、&のみパラメータ化できるはずです。false
true
true
false
SUT_INST_EXAMPLES
SUT_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_EXAMPLES
OR一致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
現在の値に基づいて変更されます。false
true
答え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