Bash: удалить фигурные скобки по условию

Bash: удалить фигурные скобки по условию

Я хочу удалить фигурные скобки из строки ниже, но только если * между ними находится .

Я нашел много ответов на эту тему, но в моем сценарии я хочу удалить только те фигурные скобки, где условие выполняется, т. е {*} --> *. .

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

С помощью простого удара

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}

Связанный контент