linux - Grep 搜索多行字符串模式 linux

标签 linux replace grep

我在文件 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/

相关文章:

regex - Grep 每行中第一次出现的位置

php - 将 SVG 图表放入生成的 PDF 文件中

java - 直接linux机器音频到java程序

PHP str_replace 未定义

grep - 关于 'grep -f' : match pattern with file

bash - bash 中意外标记 `(' 附近的语法错误

c++ - Linux C++ 如何打开一个程序

linux - GNU Parallel 面临静默退出和无效选项错误

javascript 函数替换不起作用,为什么?

java - 仅替换不是相似字符串子串的字符串?