免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: whtlly
打印 上一主题 下一主题

请教高手,关于sed的一个问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-03-10 20:54 |只看该作者

请教高手,关于sed的一个问题

[quote]原帖由 "waker"].........什么是正确结果?[/quote 发表:

应该有如下结果

eth0 202.××××××
eth1 192.168.123.1
lo 127.0.0.1

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
12 [报告]
发表于 2005-03-10 21:37 |只看该作者

请教高手,关于sed的一个问题

/^[^ ]/!d
N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/

论坛徽章:
0
13 [报告]
发表于 2005-03-12 12:00 |只看该作者

请教高手,关于sed的一个问题

请看我的两个脚本
  1. [root@lfs tmp]# cat aa
  2. #!/bin/sed -f
  3. /^[^ ]/!d
  4. N
  5. s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/



  6. [root@lfs tmp]# cat bb
  7. #!/bin/sed -f
  8. #/^[^ ]/!d
  9. #N
  10. s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/
复制代码



现在的问题是,为什么这两个脚本得到的结果不一样
  1. [root@lfs tmp]# ifconfig|./aa
  2. eth0 202.*******
  3. eth1 192.168.123.1
  4. lo 127.0.0.1
  5. [root@lfs tmp]# ifconfig|sed '/^[^ ]/!d;N'|./bb
  6. eth0      Link encap:Ethernet  HWaddr 00:0F:1F:65:02:70  
  7.           inet addr:202.******** Bcast:202.*******   Mask:255.255.255.192
  8. eth1      Link encap:Ethernet  HWaddr 00:0F:1F:65:02:71  
  9.           inet addr:192.168.123.1  Bcast:192.168.123.255  Mask:255.255.255.0
  10. lo        Link encap:Local Loopback  
  11.           inet addr:127.0.0.1  Mask:255.0.0.0
复制代码


虽然脚本bb少了两个命令
/^[^ ]/!d
N
但是把数据传递给bb前,我用命令
  1. sed '/^[^ ]/!d;N'
复制代码
把数据处理了,所以应该有相同的结果啊。

论坛徽章:
0
14 [报告]
发表于 2005-03-12 12:13 |只看该作者

请教高手,关于sed的一个问题

难道在脚本中的
  1. /^[^ ]/!d
  2. N
复制代码
和命令行中的
sed '/^[^ ]/!d;N'

处理出的数据格式不一样?

求高手解释

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
15 [报告]
发表于 2005-03-12 15:15 |只看该作者

请教高手,关于sed的一个问题

一个循环vs两个循环当然不一样了^_^

这是一个循环完成,执行s///命令时模式空间有两行内容
  1. /^[^ ]/!d
  2. N
  3. s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/
复制代码


这是分两个循环完成,执行s///命令时模式空间只有一行内容
  1. ifconfig|sed '/^[^ ]/!d;N'|./bb
复制代码

论坛徽章:
0
16 [报告]
发表于 2005-03-12 21:03 |只看该作者

请教高手,关于sed的一个问题

[quote]原帖由 "r2007"][/quote 发表:

又做了些试验,明白了

sed处理数据的时候,如果没有特殊的命令如N,遇到'\n'就把读到的数据交给下面的命令处理,完成后再读取数据。是以'\n'作为数据的分隔符的。

论坛徽章:
0
17 [报告]
发表于 2005-03-12 21:05 |只看该作者

请教高手,关于sed的一个问题

[quote]原帖由 "waker"]而且,在sed中只有N;H;G命令会产生\n[/quote 发表:

请问,n会产生什么字符呢?
ifconfig|sed '/^[^ ]/!d;n'>eee
ifconfig|sed '/^[^ ]/!d;N'>ee
上面的两个命令输出数据没有任何不同,我用16制编辑器查看了。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
18 [报告]
发表于 2005-03-13 08:28 |只看该作者

请教高手,关于sed的一个问题

原帖由 "whtlly" 发表:
'>ee
上面的两个命令输出数据没有任何不同,我用16制编辑器查看了。

如果有不同就奇怪了
比如一个文件f,内容是
a1
b2
那么
sed 'n' f
的过程是
读入a1 到模式空间,打印出 a1
然后n读入b2到模式空间,打印出b2

sed 'N' f
读入a1到模式空间
然后N加\n到a1后面读入b2然后打印 "a1\nb2"

请比较一下
echo "a1
b2"|sed 'n;='



echo "a1
b2"|sed 'N;='

另建议读
http://phi.sinica.edu.tw/aspac/reports/96/96005/

论坛徽章:
0
19 [报告]
发表于 2005-03-13 23:04 |只看该作者

请教高手,关于sed的一个问题

我是个新手,请给具体解释一下下面的意思。先谢谢了!!   
#!/bin/sed -f
/^[^ ]/!d
N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/

论坛徽章:
0
20 [报告]
发表于 2005-03-14 09:59 |只看该作者

请教高手,关于sed的一个问题

我一看sed的代码就头晕。。。怎么办???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP