我有一个文件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参数之类的新行)来处理变量...但是如何解决呢?
答案 0 :(得分:2)
由于多行替换和替换文本,因此与 editComponent: t =>
this.currentEditingTarget === 0 ? (
<Select
value={t.value}
onChange={e => {
t.onChange(e.target.value);
console.group(e.target.value);
this.currentEditingTarget = e.target.value;
}}
>
<MenuItem value={0}>{devices[0]}</MenuItem>
<MenuItem value={1}>{devices[1]}</MenuItem>
</Select>
) : (
<TextField
value={t.value}
onChange={e => t.onChange(e.target.value)}
type="numeric"
/>
),
相比,sed
更容易实现。您可以使用以下awk
:
awk
此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
并设置标志test1 {
p=1
期间继续读取文件而没有打印任何内容p==1
并找到一个p==1
行,然后使用变量}
中传递的多行文本设置$0
并重置var
p=0