【问题标题】: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
它循环遍历功能块(从包含{ 的行到包含} 的下一行)并打印加工文本。