我在文件 test.txt 中有以下文本: (注意:可以有更多'Boundary : CRAC' block )
BOUNDARY: CRAC2OUT
Boundary Type = INLET
Location = CRAC_OUT2
BOUNDARY CONDITIONS:
FLOW REGIME:
Option = Subsonic
END
HEAT TRANSFER:
Option = Static Temperature
Static Temperature = 16 [C]
END
MASS AND MOMENTUM:
Normal Speed = (3.8/1.185)[m^3 s^-1]/area()@CRAC2OUT
Option = Normal Speed
END
TURBULENCE:
Option = Medium Intensity and Eddy Viscosity Ratio
END
END
END
BOUNDARY: CRAC3OUT
Boundary Type = INLET
Location = CRAC_OUT3
BOUNDARY CONDITIONS:
FLOW REGIME:
Option = Subsonic
END
HEAT TRANSFER:
Option = Static Temperature
Static Temperature = 16 [C]
END
MASS AND MOMENTUM:
Normal Speed = (3.8/1.185)[m^3 s^-1]/area()@CRAC3OUT
Option = Normal Speed
END
TURBULENCE:
Option = Medium Intensity and Eddy Viscosity Ratio
END
END
END
BOUNDARY: CRAC4OUT
Boundary Type = WALL
Location = CRAC_OUT4
BOUNDARY CONDITIONS:
HEAT TRANSFER:
Option = Adiabatic
END
MASS AND MOMENTUM:
Option = No Slip Wall
END
WALL ROUGHNESS:
Option = Smooth Wall
END
END
END
我需要搜索 CRAC3OUT 并将其 block 中的静态温度值替换为 17 而不是 16,同样将其正常速度更改为 4.8 而不是 3.8。 我只需要为 CRAC3OUT 更改那个 block 。
我如何使用 grep 或 pcregrep 来执行此操作?
最佳答案
perl -i -lne 'if(/^\s*Static Temperature/ && $f==1){s/16/17/g;};
if(/^\s*Normal Speed =/ && $f==1){s/4\.8/3.8/g;$f=0};
$f=1 if(/BOUNDARY: CRAC3OUT/);
print $_' your_file
关于linux - Grep 搜索多行字符串模式 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20068802/