次へ追加

次へ追加

次の行を含む test.txt ファイルがあります。

values =  abc, def, dfg, ert, sdf, sfd, sdf   

test、txtの値に新しいコンマ区切り値を追加するためにシェルスクリプトを使用しています。

たとえば、私は必要です次へ追加test.txtの「ghf」:

values =  abc, def, dfg, ert, sdf, sfd, sdf, ghf   

値も削除する必要があります。

たとえば、私が必要な場合削除するtest.txtの "ert":

values =  abc, def, dfg, sdf, sfd, sdf, ghf   

シェルスクリプトでこれをどのように達成できますか?

(つまり)

私がくれたら

echo "abc" >> test.txt

ファイルの末尾に「abc」を追加できますが、test.txtの「values =」フィールドに追加する必要があります。

ありがとう、
ハリー

答え1

極端な状況に備えずに迅速なソリューションを提供します。
(ありがとうございます。グレンジャックマン最適化に使用されますsed。 )

次へ追加

sed -i "/^values = / s/$/, ${NEW_VALUE}/" test.txt

説明する

sed -i- で印刷せずに指定したファイルを変更しますstdout

/^values = /-sedで始まる行にあるときvalues =

s/$/, ${NEW_VALUE}/-, ${NEW_VALUE}行末に追加されます。

test.txtsed- 作業が実行されるファイルです。

削除する

sed -i "/^values = / s/ ${REMOVE_VALUE},\?//" test.txt

説明する

s/ ${REMOVE_VALUE},\?//- 最初の項目とオプションの後続の${REMOVE_VALUE}項目を削除します,

このソリューションの問題

  1. 最初の値を追加すると,すぐに追加されます。values =
  2. 最後の値を削除すると、.で終わる行が残ります,
  3. 追加/削除された変数にコマンドsedの区切り文字s(例では該当/)が含まれていると、コマンドは機能しません。

答え2

使用すると、ed次のことができます。

ed -s test.txt <<<$'/values/s/$/,ghf\nw'   # add ghf to the end of line

そして

ed -s values <<<$'/values/s/ert,//\nw'  # remove ert

関連情報