免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3918 | 回复: 10
打印 上一主题 下一主题

sed中N命令的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-30 10:49 |只看该作者 |倒序浏览
知道N是添加下一行到模式空间
    n是读入下一行到模式空间


[root@testserver test]# cat test
aaa
bbb
ccc
ddd
eee

[root@testserver test]# sed 'N;s/\n/:/' test
aaa:bbb
ccc:ddd
eee

不太明白 N的工作原理
我的理解是这样的:
首先读入aaa\n,然后碰到N命令变aaa\nbbb\n,碰到s命令,变为aaa:bbb\n,此时碰到N命令,变aaa:bbb\n\ccc\n,此时s命令为什么替换后面一个\n,而不是bbb后的\n?不明白

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2008-07-30 10:50 |只看该作者

回复 #1 肥嘟嘟 的帖子

man sed.

论坛徽章:
0
3 [报告]
发表于 2008-07-30 10:54 |只看该作者
我是这样理解的
变成‘aaa:bbb\n’后,模式空间读入下一行,在执行‘N;s/\n/:/’

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2008-07-30 10:55 |只看该作者

回复 #3 爱知 的帖子

仔细看看sed手册吧。

论坛徽章:
0
5 [报告]
发表于 2008-07-30 11:14 |只看该作者

回复 #4 blackold 的帖子

man了下,好象有点理解了,不知道对不对,还请black哥指点下
n和N的区别在于:n将下一行读到模式空间,自己输出,下一行变当前行。而N是将下一行添加到模式空间,此时模式空间有2行,中间用内置的\n分割。


[root@testserver test]# cat test
aaa
bbb
ccc
ddd
eee

[root@testserver test]# sed 'N;s/\n/:/' test
aaa:bbb
ccc:ddd
eee

我的理解是这样工作的:首先读入aaa,碰到N命令,模式空间有2行为aaa\nbbb,碰到s命令,变成aaa:bbb,然后输出。读入ccc碰到N命令,模式空间有2行为ccc\nddd,碰到s命令,变ccc:ddd,输出。然后读入eee,因为最后行,所以N命令不执行,完成。是不是这样的呢?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2008-07-30 11:22 |只看该作者

回复 #5 肥嘟嘟 的帖子

大概正确,细节部分你慢慢看man吧。

论坛类似的讨论已经很多。

论坛徽章:
0
7 [报告]
发表于 2008-07-30 11:48 |只看该作者

回复 #6 blackold 的帖子

黑哥一下下被瓦解了

^_^

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2008-07-30 11:50 |只看该作者
原帖由 无声无息 于 2008-7-30 11:48 发表
黑哥一下下被瓦解了

^_^

论坛徽章:
0
9 [报告]
发表于 2008-07-30 14:32 |只看该作者
原帖由 肥嘟嘟 于 2008-7-30 11:14 发表
man了下,好象有点理解了,不知道对不对,还请black哥指点下
n和N的区别在于:n将下一行读到模式空间,自己输出,下一行变当前行。而N是将下一行添加到模式空间,此时模式空间有2行,中间用内置的\n分割。

...



解释得通
可是为什么N进去的是bbb,而不是bbb\n ?
下一行就不带\n了么?

[ 本帖最后由 dreamone503 于 2008-7-30 14:35 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
10 [报告]
发表于 2008-07-30 14:42 |只看该作者

回复 #9 dreamone503 的帖子

sed就是这样工作的,没有为什么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP