【问题标题】:using sed to replace with wildcards使用 sed 替换通配符
【发布时间】:2018-04-24 12:55:06
【问题描述】:

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

因为它会替换最后一个双引号之前的所有内容。

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

【问题讨论】:

标签: unix sed


【解决方案1】:

你可以试试这个:

sed 's/\"name\":\"[^\"]*\"/\"name\":\"yyyy\"/' file.json

因此,修改常规模式,使其查找到下一个双引号而不是任何字符。

如果您想将更改写入文件,除了-r 标志外,您还需要-i 标志才能使用正则表达式。如果您希望将其应用于多次出现,您可以在 sed 命令中添加g

sed -i -r 's/\"name\":\"[^\"]*\"/\"name\":\"yyyy\"/g' file.json

更新:不需要转义双引号...命令可能是这样的:

sed -i -r 's/"name":"[^"]*"/"name":"yyyy"/g' file.json

【讨论】:

  • 非常感谢您的回答,它可以满足我的需要
  • 这里不需要转义双引号,因为它开始使用单引号,单引号被视为文字值。 sed 's/"name":"[^"]\+/"name":"yyyy"/'
  • 所以你的意思是不需要转义双引号?没错,可能就是这样: sed 's/"name":"[^"]*"/"name":"yyyy"/g' 。更新答案...
  • 谢谢你们!
  • 这就够了 sed 's/(name":")[^"]*/\1yyyy/'
猜你喜欢
  • 2011-09-09
  • 2020-06-24
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
相关资源
最近更新 更多