内容を含むテキストファイルがありますkeyvalue.txt
。
one=abc
two=def
three=ghi
four=jkl
five=mno
six=pqr
xyz
今私は値に追加したいと思います。three
three=ghixyz
生成されるファイルの内容は次のようになります。
one=abc
two=def
three=ghixyz
four=jkl
five=mno
six=pqr
シェルスクリプトでこれを行う方法はありますか?
答え1
いくつかの方法があります。例えばそしてsed
:
sed -i 's/^RELEASESTATUS=.*/&xyz/' keyvalue.txt
RELEASESTATUS=
これは、行全体に一致する()で始まる行を探し、その行を行の.*
内容()に置き換えて、&
その後に続きますxyz
。
答え2
〜のようにスティーブンの答え、しかし、少し異なる方法で行われます。
sed -i '/^RELEASESTATUS=/s/$/xyz/' keyvalue.txt
行全体を独自のコピーに置き換えて末尾にいくつかのテキストを追加するのではなく、最初に正しい行(最初にRELEASESTATUS=
)を見つけてから、行の末尾で目的のテキストを置き換えます。
s
これは、代替コマンド()の一般的な形式が次のようになるというsed
事実を利用します。
start,end s/pattern/replacement/flags
start
ここで、およびはend
、開始アドレスと終了アドレスにコマンドを適用する必要がある行の範囲を提供します(「アドレス」は行番号、正規表現、またはオフセットです)。単一アドレスを使用する場合、コマンドはその行(または特定の正規表現に一致する単一行)にのみ適用されます。
答え3
次のことを試すこともできますawk
。
awk 'BEGIN { FS = OFS = "=" }; $1 == "RELEASESTATUS" { $2 = $2"xyz"; }; 1' keyvalue.txt
すでに持っているGNU awk 4.1.0
か、後で行うことができる場合:
gawk -i inplace -v INPLACE_SUFFIX=.bak 'BEGIN { FS = OFS = "=" }; $1 == "RELEASESTATUS" { $2 = $2"xyz"; }; 1' keyvalue.txt