文字列を見つけてSUBSTRINGに置き換えます。

文字列を見つけてSUBSTRINGに置き換えます。

このようなファイルがあります。はい(test.txt)

$$BATCHCTRL=TEST-012017
$$STATE=CA AZ
$$FROM_DATE=01/10/2017
$$TO_DATE=01/30/2017

私がしなければなら$$STATE=CA AZないのは、これを値の最初の2バイトに置き換えることだけです。つまり(CA)。

出力ファイルは次のようにする必要があります。

$$BATCHCTRL=TEST-012017
$$STATE=CA
$$FROM_DATE=01/10/2017
$$TO_DATE=01/30/2017

答え1

私は一対の文字がSTATE大文字にあると仮定します。それ以外の場合は交換する必要があります[A-Z] [A-Za-z]

次の簡単なコマンドを使用できます。

sed -Ei 's/^\$\$STATE=([A-Z]{2}) ([A-Z]{2})/\$\$STATE=\1/g' sed_file

$$likeで始まる行を一致させ、それをandの最初のサブ式$$STATE=AB CDに置き換えます。$$STATE\1

編集:追加の一重引用符が必要な場合は、以下を使用してください。

sed -Ei 's/^\$\$STATE=([A-Z]{2}) ([A-Z]{2})/\$\$STATE='"'"'\1'"'"'/g' sed_file

答え2

awk 'BEGIN { FS=OFS="=" } $1 == "$$STATE" { split($2,a," "); $2 = "'"'"'" a[1] "'"'"'" } 1' file

awkこれは、ファイルを=区切られたフィールドのコレクションに解析するために使用されます。最初のフィールドが正しい文字列の場合、$$STATE2番目のフィールドはスペースで区切られ、一重引用符で囲まれた最初のスペースで区切られたビット値が割り当てられます。

ファンキーな外観は、"'"'"'"一重引用符で囲まれたスクリプトの二重引用符一重引用符文字ですawk

結果は次のとおりです。

$$BATCHCTRL=TEST-012017
$$STATE='CA'
$$FROM_DATE=01/10/2017
$$TO_DATE=01/30/2017

または以下を使用してくださいsed

sed -E '/^\$\$STATE=/s/=([^ ]*).*/='"'"'\1'"'"'/' file

これにより、文字列で始まる行を見つけ、$$STATE=その後のすべての行を=スペースの前の最初のビットに置き換えて、二重引用符を挿入します。

関連情報