Bash: eliminar llaves en una condición

Bash: eliminar llaves en una condición

Quiero eliminar las llaves de la cadena a continuación, pero solo si * se encuentran entre ellas.

He encontrado muchas respuestas sobre este tema, pero en mi escenario quiero eliminar solo aquellas llaves donde se cumple la condición, es decir {*} --> *.

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

Rendimiento esperado:

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

Por favor ayuda, gracias de antemano.

Respuesta1

Usando el comando sed's s(como sustituto): incluya las llaves en regexp, pero no en replacement:

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

Respuesta2

Con solo bash

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

No pude entender cómo hacer el escape para que la svariable no fuera necesaria.

Tenga en cuenta que las comillas dobles son obligatorias; de lo contrario, obtendrá:

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

Respuesta3

Dominio

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

producción

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

Método 2

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

producción

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

información relacionada