【发布时间】:2019-11-22 19:33:29
【问题描述】:
我有一个文件 out.txt
test1 {
car "ok"
disk "N/A"
tire 4
}
我需要用另一个应该在变量(bash)中的块替换整个块/test1 {/ , /\}/
所以在脚本中是这样的:
#!/bin/bash
var="
test1 {
car "fail"
disk "2"
tire 1
}
"
sed -r --follow-symlinks -e "/^test1 /,/\}/c\\${text}" out.conf
由于 sed 使用 { 和新行(如其 sed 参数)处理变量,这当然不起作用......但是如何绕过它?
【问题讨论】:
-
您使用几乎有效的JSON有什么原因吗?切换到标准格式可能更有意义。
-
@tripleee 哦,伙计,如果我可以使用有效的 Json,这将使我的生活 100% 更轻松,可悲的是,正如你所说的“几乎有效”的 json .. 所以我必须想出这么多有线的东西使事情自动化,甚至都不好笑。这只是一个小例子,接近我必须使它更容易解决的问题。而且我无法更改格式:-/
-
@VladoPortos:您想要一个仅 sed 的解决方案还是使用更适合的工具(如 awk/perl)?
-
@anubhava 最好是 sed,但据我所知,没有简单的解决方案,所以如果 awk 可以让它变得简单,我会使用它:)
-
您的替换块能否在双引号字符串或其他任何地方包含
}或\t(或其他转义字符)?输入文件中的test1 {和}定界符是否总是在自己的行上?