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 s
variable 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}