Bash: 条件中の中括弧を削除する

Bash: 条件中の中括弧を削除する

以下の文字列から中括弧を削除したいのですが、 * 中括弧の間に が見つかった場合のみです。

このトピックについては多くの回答を見つけましたが、私のシナリオでは、条件が満たされる中括弧のみを削除したいと考えています{*} --> *

name,apple,price,{50 70 80 80},color,{*}
name,orange,price,{*},color,{80 30 40}

期待される出力:

name,apple,price,{50 70 80 80},color,*
name,orange,price,*,color,{80 30 40}

助けてください、よろしくお願いします。

答え1

sedのコマンドを使用するs(substitute のように) – には中括弧を含めますregexpが、 には含めませんreplacement

sed 's/{\*}/*/g'

答え2

bashだけで

line='name,orange,price,{*},color,{80 30 40}'
s='{*}'
echo "${line//"$s"/*}"
name,orange,price,*,color,{80 30 40}

s変数が必要ないようにエスケープする方法がわかりませんでした。

二重引用符が必要であることに注意してください。そうでない場合、次のようになります。

$ echo "${line//$s/*}"
name,orange,price,*

答え3

指示

sed "/{\*}/s/{\*}/*/g" filename

出力

name,apple,price,{50 70 80 80},color,*
name,orange,price,*,color,{80 30 40}

方法2

awk '$0 ~ "{*}" {gsub (/{\*}/,"*",$0);print }'  filename

出力

name,apple,price,{50 70 80 80},color,*
name,orange,price,*,color,{80 30 40}

関連情報