以下の文字列から中括弧を削除したいのですが、 *
中括弧の間に が見つかった場合のみです。
このトピックについては多くの回答を見つけましたが、私のシナリオでは、条件が満たされる中括弧のみを削除したいと考えています{*} --> *
。
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}