【问题标题】:Delimeter range lines functions分隔符范围线功能
【发布时间】:2016-07-04 06:24:48
【问题描述】:

我有

define host {
  aaa
  bbb
}
define host {
  aaa
  bbb
  ccc
}
define host {
  aaa
  ddd

我想做的是:

for i in $([awk][sed] xxxxxxxx file) ; do grep "xxxxx" $i ; done

每次迭代都是一个函数

1)

define host {
  aaa
  bbb
}

2)

define host {
  aaa
  bbb
  ccc
}

3)

define host {
  aaa
  ddd
}

为此,我尝试使用 awk、sed。但是我工作不好

谢谢。

【问题讨论】:

    标签: linux bash awk command-line sed


    【解决方案1】:

    你需要这样吗?

    $ awk 'BEGIN{ORS=RS="}\n"} /ccc/{print $0}' file
    

    输出:

    define host {
      aaa
      bbb
      ccc
    }
    

    【讨论】:

      【解决方案2】:

      awk 与自定义RS 一起使用:

      awk -v RS='}\n*' 'RT{print "(" NR ")", ORS $0 RT}' file
      
      (1)
      define host {
        aaa
        bbb
      }
      
      (2)
      define host {
        aaa
        bbb
        ccc
      }
      
      (3)
      define host {
        aaa
        ddd
      }
      

      (1)(2)(3) 是此处的记录编号,您可以使用

      从输出中省略它们
      awk -v RS='}\n*' 'RT{print $0 RT}' file
      

      【讨论】:

        【解决方案3】:

        如果你想对你的函数进行 grep,为什么不直接使用:

        $ sed -n '/{/,/}/{/bbb/p}' file
        bbb
        bbb
        

        它循环遍历功能块(从包含{ 的行到包含} 的下一行)并打印加工文本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-25
          • 2021-01-21
          • 1970-01-01
          • 1970-01-01
          • 2014-12-12
          相关资源
          最近更新 更多