[英]Replace block with variable containing multiple lines containing special characters
我有一个文件 out.txt
test1 {
car "ok"
disk "N/A"
tire 4
}
我需要将整个块/test1 {/, /\}/
替换为另一个应该在变量中的块(bash)
所以在脚本中它看起来像这样:
#!/bin/bash
var="
test1 {
car "fail"
disk "2"
tire 1
}
"
sed -r --follow-symlinks -e "/^test1 /,/\}/c\\${text}" out.conf
哪一个当然不起作用,因为 sed 使用 { 处理变量以及像它的 sed 参数这样的新行......但是如何围绕它进行 go 呢?
由于多行替换和替换文本,使用awk
而不是sed
更容易做到这一点。 您可以使用此awk
:
var="
test1 {
car "fail"
disk "2"
tire 1
}
"
awk -v var="$var" 'p && /^[[:blank:]]*}[[:blank:]]*$/ { $0=var; p=0 }
/^[[:blank:]]*test1[[:blank:]]*\{/ { p=1 } !p' out.conf
这个 awk 的工作原理如下:
test1 {
并设置标志p=1
p==1
时继续读取文件而不打印任何内容p==1
并找到带有}
的行,则使用变量var
中传递的多行文本设置$0
并重置p=0
p==0
时打印行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.