在模式匹配后编辑行,但仅在模式匹配后编辑

时间:2016-11-18 18:29:53

标签: awk sed

我有一个包含多个宏及其相应详细信息的文件。感兴趣的代码在这里:

MACRO QWERTY
  CLASS FOO ;
  ORIGIN 0.0 0.0 ;
  FOREIGN QWERTY 0.0 0.0 ;
  SIZE 2.123 BY 0.369 ;
  SYMMETRY Y ;

我感兴趣的是编辑的SYMMETRY只是宏" QWERTY"并从#34; SYMMETRY Y;" to" SYMMETRY X Y;"。 (G)awk或sed工作得很好。我尝试了以下方法,但它又恢复了空虚:

gawk '1;/MACRO QWERTY/{c=5}c&&!--c{gsub(/Y/,"X Y")}' 

谢谢!

1 个答案:

答案 0 :(得分:0)

使用GNU sed:

sed '/^MACRO QWERTY$/,/SYMMETRY/s/SYMMETRY Y/SYMMETRY X Y/' file

输出:

MACRO QWERTY
  CLASS FOO ;
  ORIGIN 0.0 0.0 ;
  FOREIGN QWERTY 0.0 0.0 ;
  SIZE 2.123 BY 0.369 ;
  SYMMETRY X Y ;