使用 sed 替换大括号之间的模式,其中左大括号之前的行有一个已知单词

问题描述 投票:0回答:1

我想改变:

inlet
{
    type    patch;
    ...
}
outlet
{
        type  patch;
} 

inlet
{
    type    wall;
    ...
}
outlet
{
        type  patch;
} 

我尝试使用 inlet*{ 和 } 提供范围,与 sed -i .bak 's/[img:.*]/[img]/g' file.txt 此链接一致(在两个模式之间替换多个惰性字符串sed),他们使用方括号。但是使用 {,} 的范围不起作用

awk sed replace pattern-matching openfoam
1个回答
0
投票

此解决方案是否合适将取决于您的实际数据,但根据您的示例,一种潜在的选择是使用 awk 并更改记录分隔符:

cat test.txt
inlet
{
    type    patch;
    ...
}
outlet
{
        type  patch;
}

awk 'BEGIN{RS="^[[:alpha:]]"} /inlet/ {sub("patch", "wall", $0); print} !/inlet/' test.txt
inlet
{
    type    wall;
    ...
}
outlet
{
        type  patch;
}
© www.soinside.com 2019 - 2024. All rights reserved.