Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2072876
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-05-09 10:01:32

(何时才能飞)
广告杀手-老法王
人生的转折



CU编号: 26424
注册:2002-11-2
最后登录: 2009-05-08
帖子:
精华:







状态:...保密...

[] [] [博客]


[]     顶部
发表于 2005-4-29 08:29 
假如每行第2、5个元素要取,可以用awk '{print $2" "$5}'
假如有一些段落,每个段落我要取第2、5行应该如何处理呢?



您对本贴的看法:

__________________________________

当我们在为生活而疲惫奔波的时候
生活却渐渐离我们远去
find our way, find our style
| |
  帅哥 (骑驴来灌水)
天使
半桶水



CU编号: 180141
注册:2004-8-30
最后登录: 2008-03-11
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-4-29 09:03 
取一个段落中关键字的问题(已解决)

sed -n '2,5p' text|awk '{print $2" "$5}'
可不可以哦



您对本贴的看法:

__________________________________

有啥也别有病,没啥也别没钱!
----钱途光明
| |
版主 (何时才能飞)
广告杀手-老法王
人生的转折



CU编号: 26424
注册:2002-11-2
最后登录: 2009-05-08
帖子:
精华:







状态:...保密...

[] [] [博客]


[]     顶部
发表于 2005-4-29 09:07 
取一个段落中关键字的问题(已解决)

但是,消息是循环的
比如我要要看的是dhcpd.leases,显示其中的IP和MAC
原始资料如下

QUOTE:
[root@CRIFST dhcp]# cat dhcpd.leases
# All times in this file are in UTC (GMT), not your local timezone.   This is
# not a bug, so please don't ask about it.   There is no portable way to
# store leases in the local timezone, so please don't request this as a
# feature.   If this is inconvenient or confusing to you, we sincerely
# apologize.   Seriously, though - don't ask.
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-V3.0.1

lease 192.168.103.198 {
  starts 5 2005/04/29 00:55:41;
  ends 2 2038/01/19 03:14:06;
  tstp 2 2038/01/19 03:14:06;
  binding state active;
  next binding state free;
  hardware ethernet 00:30:05:06:af:14;
  uid "\001\0000\005\006\257\024";
  client-hostname "secend";
}
lease 192.168.103.193 {
  starts 5 2005/04/29 00:58:07;
  ends 2 2038/01/19 03:14:06;
  tstp 2 2038/01/19 03:14:06;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:6e:55:f7:dd;
  uid "\001\000\014nU\367\335";
  client-hostname "gaohangjun";
}
lease 192.168.103.192 {
  starts 5 2005/04/29 00:59:00;
  ends 2 2038/01/19 03:14:06;
  binding state active;
  next binding state free;
  hardware ethernet 00:30:05:03:8a:08;
  uid "\001\0000\005\003\212\010";
  client-hostname "jj";
}
lease 192.168.102.199 {
  starts 5 2005/04/29 00:59:46;
  ends 2 2038/01/19 03:14:06;
  binding state active;
  next binding state free;
  hardware ethernet 00:0f:3d:21:8d:2a;
  uid "\001\000\017=!\215*";
  client-hostname "DLA502";
}
lease 192.168.102.199 {
  starts 5 2005/04/29 00:59:46;
  ends 5 2005/04/29 01:01:16;
  tstp 5 2005/04/29 01:01:16;
  binding state free;
  hardware ethernet 00:0f:3d:21:8d:2a;
  uid "\001\000\017=!\215*";
}

只显示每段的 lease 和 hardware 那两行中的IP和MAC,并合并为一行输出



您对本贴的看法:

__________________________________

当我们在为生活而疲惫奔波的时候
生活却渐渐离我们远去
find our way, find our style
  帅哥
荣誉版主-法师



荣誉版主  
CU编号: 107641
注册:2003-10-28
最后登录: 2009-04-17
帖子:
精华:







来自:Taiwan
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-4-29 20:27 
取一个段落中关键字的问题(已解决)



CODE:
[netman@www tmp]$ cat dhcpd.leases
# All times in this file are in UTC (GMT), not your local timezone.   This is
# not a bug, so please don't ask about it.   There is no portable way to
# store leases in the local timezone, so please don't request this as a
# feature.   If this is inconvenient or confusing to you, we sincerely
# apologize.   Seriously, though - don't ask.
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-V3.0.1

lease 192.168.103.198 {
starts 5 2005/04/29 00:55:41;
ends 2 2038/01/19 03:14:06;
tstp 2 2038/01/19 03:14:06;
binding state active;
next binding state free;
hardware ethernet 00:30:05:06:af:14;
uid "\001\0000\005\006\257\024";
client-hostname "secend";
}
lease 192.168.103.193 {
starts 5 2005/04/29 00:58:07;
ends 2 2038/01/19 03:14:06;
tstp 2 2038/01/19 03:14:06;
binding state active;
next binding state free;
hardware ethernet 00:0c:6e:55:f7:dd;
uid "\001\000\014nU\367\335";
client-hostname "gaohangjun";
}
lease 192.168.103.192 {
starts 5 2005/04/29 00:59:00;
ends 2 2038/01/19 03:14:06;
binding state active;
next binding state free;
hardware ethernet 00:30:05:03:8a:08;
uid "\001\0000\005\003\212\010";
client-hostname "jj";
}
lease 192.168.103.200 {
starts 5 2005/04/29 01:37:54;
ends 5 2005/04/29 01:37:54;
binding state free;
client-hostname "lenovo-2f31e43d";
}
lease 192.168.103.197 {
starts 5 2005/04/29 01:38:27;
ends 5 2005/04/29 01:38:27;
binding state free;
}
lease 192.168.103.196 {
starts 5 2005/04/29 01:38:38;
ends 5 2005/04/29 01:38:38;
tstp 5 2005/04/29 01:38:38;
binding state free;
}
lease 192.168.103.195 {
starts 5 2005/04/29 01:38:49;
ends 5 2005/04/29 01:38:49;
tstp 5 2005/04/29 01:38:49;
binding state free;
}
lease 192.168.103.194 {
starts 5 2005/04/29 01:39:00;
ends 5 2005/04/29 01:39:00;
tstp 5 2005/04/29 01:39:00;
binding state free;
}
lease 192.168.102.197 {
starts 5 2005/04/29 01:38:27;
ends 5 2005/04/29 01:39:57;
tstp 5 2005/04/29 01:39:57;
binding state free;
hardware ethernet 00:0f:3d:21:8d:30;
uid "\001\000\017=!\2150";
}
lease 192.168.102.199 {
starts 5 2005/04/29 00:59:46;
ends 2 2038/01/19 03:14:06;
binding state active;
next binding state free;
hardware ethernet 00:0f:3d:21:8d:2a;
uid "\001\000\017=!\215*";
client-hostname "DLA502";
}
lease 192.168.102.199 {
starts 5 2005/04/29 00:59:46;
ends 5 2005/04/29 01:01:16;
tstp 5 2005/04/29 01:01:16;
binding state free;
hardware ethernet 00:0f:3d:21:8d:2a;
uid "\001\000\017=!\215*";
}
[netman@www tmp]$ echo `cat dhcpd.leases` | tr '}' '\n' | grep '^ lease .*hardware'| sed 's/lease \([^ ]*\).*ethernet \([^ ]*\)\; .*/\1 \2/'
192.168.103.193 00:0c:6e:55:f7:dd
192.168.103.192 00:30:05:03:8a:08
192.168.102.197 00:0f:3d:21:8d:30
192.168.102.199 00:0f:3d:21:8d:2a
192.168.102.199 00:0f:3d:21:8d:2a




您对本贴的看法:

__________________________________

君子博學而日參省乎己,則知明而行無過矣。

CODE:
:() { :|:& }; :      # <--- 這個別亂跑!好奇會死人的!
echo '十人|日一|十十o' | sed 's/.../&\n/g'   # <--- 跟你講就不聽,再跑這個好了...

| |
  帅哥
大天使




CU编号: 207236
注册:2004-12-13
最后登录: 2009-02-12
帖子:
精华:0







来自:天津
状态:...保密...

[] [] [博客]


[]     顶部
发表于 2005-4-29 20:43 
取一个段落中关键字的问题(已解决)

上面这个……帅呆了~



您对本贴的看法:

__________________________________

SUN E4500/SUN F4800/SUN V880
Solaris 8
KSH/NAWK/SED/VIM 6.3.3/perl 5.005_03
| |
  帅哥
老法王


CU奥运火炬传递手2008
荣誉会员  
CU编号: 187152
注册:2004-10-1
最后登录: 2009-05-09
帖子:
精华:







来自:北京海淀
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-4-29 20:48 
取一个段落中关键字的问题(已解决)

[quote]原帖由 "一梦如是"]上面这个……帅呆了~[/quote 发表:

netman,我的偶像! 当然帅D酷B :mrgreen:


  帅哥
荣誉版主-法师



荣誉版主  
CU编号: 107641
注册:2003-10-28
最后登录: 2009-04-17
帖子:
精华:







来自:Taiwan
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-17 22:13 
取一个段落中关键字的问题(已解决)

oh. bug found...
要將 ^lease 改為 lease 了...  ^_^



您对本贴的看法:

__________________________________

君子博學而日參省乎己,則知明而行無過矣。

CODE:
:() { :|:& }; :      # <--- 這個別亂跑!好奇會死人的!
echo '十人|日一|十十o' | sed 's/.../&\n/g'   # <--- 跟你講就不聽,再跑這個好了...

| |
  帅哥
大天使




荣誉会员  
CU编号: 51293
注册:2003-4-10
最后登录: 2009-05-05
帖子:
精华:







来自:西安
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 00:24 
取一个段落中关键字的问题(已解决)

我想这个问题用awk比较适合。试试这个:

CODE:
awk -F"[ ;]" '/^lease|hard/{printf $(NF-1)}/{/{printf " "}/}/{print ""}'

上面将硬件地址缺失的作为空字段列出,如果需要可以进一步过滤掉这些行:

CODE:
awk -F"[ ;]" '/^lease|hard/{printf $(NF-1)}/{/{printf " "}/}/{print ""}' ur-file | grep -v " $"




您对本贴的看法:
| |
  帅哥
大天使




荣誉会员  
CU编号: 51293
注册:2003-4-10
最后登录: 2009-05-05
帖子:
精华:







来自:西安
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 10:25 
取一个段落中关键字的问题(已解决)

也可以这样:

CODE:
awk -F"[ ;]" '/lease/{ip=$(NF-1)}/hard/{printf "%s %s\n", ip, $(NF-1)}'




您对本贴的看法:
| |
  美女
侠客



CU编号: 199998
注册:2004-11-17
最后登录: 2005-05-28
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 11:50 
取一个段落中关键字的问题(已解决)



QUOTE:
原帖由 "woodie" 发表:

awk -F"[ ;]" '/lease/{ip=$(NF-1)}/hard/{printf "%s %s\n", ip, $(NF-1)}'

woodieGG能讲解一下吗 :em02:



您对本贴的看法:

__________________________________

开始喜欢shell了 ^_^

| |
  帅哥
大天使




荣誉会员  
CU编号: 51293
注册:2003-4-10
最后登录: 2009-05-05
帖子:
精华:







来自:西安
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 12:19 
取一个段落中关键字的问题(已解决)



QUOTE:
原帖由 "云飞舞" 发表:

woodieGG能讲解一下吗 :em02:

非常乐意!

命令行选项-F"[ ;]" 告诉awk空格和分号都是字段分隔符,加入分号是为了后面提取mac地址时的方便。

/lease/{ip=$(NF-1)}表示当前行匹配lease时提取ip地址并暂存,而先不打印。

/hard/{printf "%s %s\n", ip, $(NF-1)}表示当前行匹配hard时打印暂存的ip地址和mac地址。如果没有hard这行的话是不会执行打印动作的。

不知道说清楚了没有?



您对本贴的看法:
| |
  美女
侠客



CU编号: 199998
注册:2004-11-17
最后登录: 2005-05-28
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 12:28 
取一个段落中关键字的问题(已解决)

谢谢GG,我明白啦 :em03:
我又演绎了一下,这样也能显示主机的hostname了 :em02:

CODE:
cat /var/lib/dhcp/dhcpd.leases|awk -F"[ ;]" '/lease/{ip=$(NF-1)}/hard/{mac=$(NF-1)}/host/{printf "%s %s %s\n",ip,mac,$(NF-1)}'




您对本贴的看法:

__________________________________

开始喜欢shell了 ^_^

| |
  帅哥
大天使




荣誉会员  
CU编号: 51293
注册:2003-4-10
最后登录: 2009-05-05
帖子:
精华:







来自:西安
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 15:05 
取一个段落中关键字的问题(已解决)

举一反三呀,不错!:D

不过这样mac地址取不到的问题又出来了。你可以想想怎么解决,提示一下,可以用个标志变量判断是否要打印。



您对本贴的看法:
| |
  美女
侠客



CU编号: 199998
注册:2004-11-17
最后登录: 2005-05-28
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 15:37 
取一个段落中关键字的问题(已解决)

我现在创建了一个文件,内容是这样的

QUOTE:
lease 192.168.102.187 {
  starts 3 2005/05/18 07:11:30;
  ends 2 2038/01/19 03:14:06;
  binding state active;
  next binding state free;
  hardware ethernet 00:07:95:ce:a0:55;
  uid "\001\000\007\225\316\240U";
  client-hostname "billgates";
}
lease 192.168.103.200 {
starts 5 2005/04/29 01:37:54;
ends 5 2005/04/29 01:37:54;
binding state free;
client-hostname "lenovo-2f31e43d";
}
lease 192.168.103.197 {
starts 5 2005/04/29 01:38:27;
ends 5 2005/04/29 01:38:27;
tstp 5 2005/04/29 01:38:27;
binding state free;
}
lease 192.168.102.197 {
starts 5 2005/04/29 01:38:27;
ends 5 2005/04/29 01:39:57;
tstp 5 2005/04/29 01:39:57;
binding state free;
hardware ethernet 00:0f:3d:21:8d:30;
uid "\001\000\017=!\2150";
}
lease 192.168.103.188 {
  starts 3 2005/05/18 07:11:37;
  ends 2 2038/01/19 03:14:06;
  binding state active;
  next binding state free;
  hardware ethernet 00:e0:4c:e5:06:6c;
  uid "\001\000\340L\345\006l";
  client-hostname "cq";
}

文件名字是test,里面包含了一些错误的DHCP申请记录信息,为什么执行结果是这样的?

CODE:
# cat test|awk -F"[ ;]" '/lease/{ip=$(NF-1)}/hard/{mac=$(NF-1)}/host/{printf "%s %s %s\n",ip,mac,$(NF-1)}'
192.168.102.187 00:07:95:ce:a0:55 "billgates"
192.168.103.200 00:07:95:ce:a0:55 "lenovo-2f31e43d"
192.168.103.188 00:e0:4c:e5:06:6c "cq"

难道说,是因为第一次mac已经有了记录,所以第二个的时候就仍然保留了上次的mac信息吗?



您对本贴的看法:

__________________________________

开始喜欢shell了 ^_^

| |

精灵王




CU编号: 84423
注册:2003-8-14
最后登录: 2008-06-19
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 17:13 
取一个段落中关键字的问题(已解决)

[quote]原帖由 "云飞舞"]难道说,是因为第一次mac已经有了记录,所以第二个的时候就仍然保留了上次的mac信息吗?[/quote 发表:

试试这个:
awk '
{ gsub(/;/,"")
   if($0~/lease/)
       f = sprintf("%s ", $2)
   if($0~/hardware/)
       s = sprintf("%s", $3)
   if($0~/}/ && f != "" && s != ""){
       printf("%s %s \n", f, s)
       f = ""
       s = "" }
}' dhcpd.leases

运行结果:
192.168.102.187  00:07:95:ce:a0:55
192.168.102.197  00:0f:3d:21:8d:30
192.168.103.188  00:e0:4c:e5:06:6c



您对本贴的看法:
| |
  帅哥
荣誉版主-法师



荣誉版主  
CU编号: 107641
注册:2003-10-28
最后登录: 2009-04-17
帖子:
精华:







来自:Taiwan
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 22:59 
取一个段落中关键字的问题(已解决)



QUOTE:
原帖由 "woodie" 发表:
遖wk空格和分号都是字段分隔符,加入分号是为了后面提取mac地址时的方便。

/lease/{ip=$(NF-1)}表示当前行匹配lease时提取ip地址并暂存,而先不打印。

/hard/{printf "%s %s\n", ip, $(NF-1)}表示当前行匹配ha..........

呵.... 真妙! 讚一下!  ^_^



您对本贴的看法:

__________________________________

君子博學而日參省乎己,則知明而行無過矣。

CODE:
:() { :|:& }; :      # <--- 這個別亂跑!好奇會死人的!
echo '十人|日一|十十o' | sed 's/.../&\n/g'   # <--- 跟你講就不聽,再跑這個好了...
  帅哥
大天使




荣誉会员  
CU编号: 51293
注册:2003-4-10
最后登录: 2009-05-05
帖子:
精华:







来自:西安
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2005-5-18 23:13 
取一个段落中关键字的问题(已解决)

网版主和007版主两位都在线啊,看来夜猫子还不止我一个。hehe
网兄的许多大作都拜读过,小弟仰慕已久了呀!还有很多要向您学习呢。 :em09:



您对本贴的看法:
| |
  帅哥
天使




CU编号: 726971
注册:2008-7-7
最后登录: 2009-05-09
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-8 17:51 
学习



您对本贴的看法:

__________________________________

念吾一身,飘然旷野!
| |

天使



CU编号: 347943
注册:2005-12-11
最后登录: 2009-05-09
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-8 17:57 
[root@Mylinux tmp]# awk '/^lease/{v=$2}/hardware ethernet/{sub(/;/,"",$3);print v,$3}' file
192.168.103.198 00:30:05:06:af:14
192.168.103.193 00:0c:6e:55:f7:dd
192.168.103.192 00:30:05:03:8a:08
192.168.102.199 00:0f:3d:21:8d:2a
192.168.102.199 00:0f:3d:21:8d:2a



您对本贴的看法:

__________________________________

shell新手&&awk新手
我的awk学习笔记
http://blog.chinaunix.net/u3/91453/showart_1798635.html
| |
(狼烟)
精灵王
披着狼皮的羊



CU编号: 547805
注册:2007-4-5
最后登录: 2009-05-09
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-8 18:19 
那么老的帖子都顶上来啊…… - -
awk的ywlscpl写了,换个法子试一个:

CODE:
grep -Eo "[0-9]+(\.[0-9]+){3}|..(:..){5}" URFILE | sed 'N;s/\n/ - /'




您对本贴的看法:
| |
  帅哥
精灵王




CU编号: 690903
注册:2008-4-13
最后登录: 2009-05-09
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-5-8 18:58 
sed  -n '/lease/p;/hardware/p' urfile | sed 'N;s/\n//' | awk -F"[ |;]" '{print $2," "$(NF-1)}'

[ 本帖最后由 greendays 于 2009-5-9 09:44 编辑 ]



您对本贴的看法:
| |
  帅哥
骑士




CU编号: 634080
注册:2007-10-27
最后登录: 2009-05-08
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-9 00:07 
试试我这个
sed -n -e '/^[^#]/p' dhcpd.leases | sed -e 's/^ *//' | awk -F " |;" '{if($0~/lease/){print $2}else if($0~/hardware ethernet/){print $3}}' | sed '/:/!N;/:/s/\n/ /;/:/!D'

如需剔重,管道给uniq


ywlscpl  的正解
kwokcn 的有点问题吧,这种方法如果MAC正好匹配到单数行就有问题了,不过前面过滤数据想法蛮好的,改进下我的脚本:)

grep -Eo "[0-9]+(\.[0-9]+){3}|..(:..){5}" dhcpd.leases | sed '/:/!N;/:/s/\n/ /;/:/!D'

这样比较简洁了,呵呵

[ 本帖最后由 kenshinsee 于 2009-5-9 00:27 编辑 ]



您对本贴的看法:
| |
(狼烟)
精灵王
披着狼皮的羊



CU编号: 547805
注册:2007-4-5
最后登录: 2009-05-09
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-9 01:39 


QUOTE:
原帖由 kenshinsee 于 2009-5-9 00:07 发表
试试我这个
sed -n -e '/^[^#]/p' dhcpd.leases | sed -e 's/^ *//' | awk -F " |;" '{if($0~/lease/){print $2}else if($0~/hardware ethernet/){print $3}}' | sed '/:/!N;/:/s/\n/ /;/:/!D'

如需剔重,管 ...

按照楼主的例子,一个IP对应一个MAC,grep出来的结果,IP肯定是奇数行,MAC肯定是偶数行。
我那个效率并不是很好,就是写着练练手。


阅读(725) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~