我正在尝试替换此文本(无论xxxx):
{"type":"record","name":"xxxx","namespace":"example","fields":[{"name":"name","type":"string"}, {"name":"favorite_color","type":["string","null"]}]}
这一个:
{"type":"record","name":"yyyy","namespace":"example","fields":[{"name":"name","type":"string"},{"name":"favorite_color","type":["string","null"]}]}
我正在使用sed,但使用此命令:
sed 's/\"name\"\:\".*\"/\"name\"\:\"yyyy\"/' file.json
我得到了:
{"type":"record", "name":"yyyy"]}]}
因为它会替换所有内容,直到最后一个双引号。
如何使用通配符直到下一个双引号才能替换文本?
答案 0 :(得分:0)
你可以试试这个:
sed 's/\"name\":\"[^\"]*\"/\"name\":\"yyyy\"/' file.json
因此,修改常规模式,使其看起来直到下一个双引号而不是任何字符。
如果要将更改写入文件,除-i
标志外,还需要-r
标志才能使用正则表达式。如果您希望将其应用于多次出现,可以在sed命令中添加g
:
sed -i -r 's/\"name\":\"[^\"]*\"/\"name\":\"yyyy\"/g' file.json
更新:不需要转义双引号...命令可能就是这样:
sed -i -r 's/"name":"[^"]*"/"name":"yyyy"/g' file.json