【发布时间】:2015-08-08 04:08:18
【问题描述】:
我正在寻找在终端中执行的单行代码,以在文本文件中用我自己的上下文替换多行文本块。我在 OSX(不是 GNU sed)上,无法安装任何附加工具。
我想要做的是替换
{
"user" :
{
"name": "Andreas",
"age": 34
},
"viewer" :
{
"name": "Pedro",
"age": 41
}
}
“用户”块内的大括号之间的两行带有自己的值以获得结果:
{
"user" :
{
"name": "Mike",
"age": 29
},
"viewer" :
{
"name": "Pedro",
"age": 41
}
}
对包含“name”或“age”的行进行简单搜索是行不通的,因为它们可以属于另一个结构并且不应被修改。
通过结合几个例子,我发现我得到了这个:
sed -i '' -n $'1h;1! H;$ {;g;s#"user"[^{]*[^}]*#"user" :\\\n\\\t{\\\n\\\t\\\t"name": "Mike",\\\n\\\t\\\t"age": 29\\\n\\\t#p;}' config.json
但它似乎很复杂,这是我的问题。
- 如何修改匹配模式以仅检测括号之间的内容,因此我不必重新创建“用户”键。
- 还有其他更优雅的解决方案吗?欢迎使用 sed、awk 或 OS X 中包含的任何其他系统工具。
【问题讨论】:
标签: regex awk sed osx-yosemite