我想从下面的字符串中删除大括号,但前提是 *
在它们之间找到大括号。
我在这个主题上找到了很多答案,但在我的场景中,我只想删除那些满足条件的大括号,即{*} --> *
.
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
'ss
命令(如替代) - 在 中包含大括号regexp
,但不在 中replacement
:
sed 's/{\*}/*/g'
答案2
只需 bash
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}