使用sed替换为通配符

时间:2018-04-24 12:55:06

标签: unix sed

我正在尝试替换此文本(无论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"]}]}

因为它会替换所有内容,直到最后一个双引号。

如何使用通配符直​​到下一个双引号才能替换文本?

1 个答案:

答案 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