Chinaunix

标题: 如何用awk&sed匹配这段内容。 [打印本页]

作者: listen1001    时间: 2009-08-20 11:32
标题: 如何用awk&sed匹配这段内容。
;; QUESTION SECTION:
;www.cache.gslb.netease.com.        IN        A

;; ANSWER SECTION:
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.16
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.17
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.9
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.10
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.11
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.12
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.13
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.14
www.cache.gslb.netease.com. 1800 IN        A        61.135.253.15

;; AUTHORITY SECTION:
gslb.netease.com.        1800        IN        NS        gslb2.netease.com.
gslb.netease.com.        1800        IN        NS        gslb1.netease.com.

***********
现自想匹配ANSWER SECTION这行和/^$/之间的行,如何匹配?
就是/ANSWER SECTION/,/^$/{}的匹配结果去掉ANSWER SECTION行和/^$/行。
最好不要用ANSWER SECTION这行和/^$/之间的内容进行匹配。
作者: Minsic    时间: 2009-08-20 11:43
  1. sed -n '/ANSWER SECTION/,/^$/{/ANSWER SECTION/d;/^$/d;p;}' urfile
复制代码

  1. awk '/ANSWER SECTION/{while($0!~/^$/){getline;if($0~/^$/)exit;else print}}' urfile
复制代码

作者: lucash    时间: 2009-08-20 11:49
awk '/ANSWER SECTION:/,/^$/{if ($0 ~ /ANSWER|^$/) getline;else print}' file
作者: listen1001    时间: 2009-08-20 11:51
谢谢楼上的,这样可以的
但用awk的话    pattern {action}
我在匹配以后还要在action里对数据进行操作的,这样有点乱。
有没有直接在pattern部分就匹配的方法
作者: listen1001    时间: 2009-08-20 11:52
支不支持//+1,//-1的匹配方法阿。
作者: 小木虫子    时间: 2009-08-20 11:55
[root@test ~]# sed -n '/ANSWER SECTION/,/^$/p' test|tail -n +2|tac|tail -n +2|tr -s " " " "|sort -t" "  -k5.12 -n -r | awk 'BEGIN{OFS="\t"}$1=$1'

www.cache.gslb.netease.com.     1800    IN      A       61.135.253.17
www.cache.gslb.netease.com.     1800    IN      A       61.135.253.16
www.cache.gslb.netease.com.     1800    IN      A       61.135.253.15
www.cache.gslb.netease.com.     1800    IN      A       61.135.253.14
www.cache.gslb.netease.com.     1800    IN      A       61.135.253.13
www.cache.gslb.netease.com.     1800    IN      A       61.135.253.12
www.cache.gslb.netease.com.     1800    IN      A       61.135.253.11
www.cache.gslb.netease.com.     1800    IN      A       61.135.253.10
www.cache.gslb.netease.com.     1800    IN      A       61.135.253.9

[ 本帖最后由 小木虫子 于 2009-8-20 12:21 编辑 ]
作者: listen1001    时间: 2009-08-20 11:58
根据大家的思路直接在{}里加个判断
awk '/ANSWER SECTION/,/^$/{if(NF==5)print $1,$5>"output"}' file




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2