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 sed
o 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 s
variá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}