Delimeter系列功能

时间:2016-03-17 18:07:18

标签: linux bash awk command-line sed

我有

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。但我工作不好

THX。

3 个答案:

答案 0 :(得分:0)

你需要这样吗?

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

输出:

define host {
  aaa
  bbb
  ccc
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果你想看看你的功能,为什么不使用:

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

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