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