これらのペアの多いテキストファイルのキー値ペアから値テキストを追加する方法

これらのペアの多いテキストファイルのキー値ペアから値テキストを追加する方法

内容を含むテキストファイルがあります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

関連情報