Bash: exclua chaves em uma condição

Bash: exclua chaves em uma condição

Quero remover chaves da string abaixo, mas somente se * for encontrado entre elas.

Encontrei muitas respostas sobre esse tópico, mas no meu cenário quero excluir apenas as chaves onde a condição for atendida, ou seja, {*} --> *.

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

resultado esperado:

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

Por favor ajude, obrigado antecipadamente.

Responder1

Usando sedo comando ' s(como substituto) - inclua as chaves no regexp, mas não no replacement:

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

Responder2

Com apenas bash

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

Não consegui descobrir como fazer o escape para que a svariável não fosse necessária.

Observe que as aspas duplas são obrigatórias, caso contrário você obterá:

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

Responder3

Comando

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

saída

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

Método 2

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

saída

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

informação relacionada