免费注册 查看新帖 |

Chinaunix

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

[其他] 请教下大家一个sed的问题 [复制链接]

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-16 10:04 |只看该作者 |倒序浏览
  1. [root@ ~]$ sed = file
  2. 1
  3. 111111111111111111
  4. 2
  5. 222222222222222222
  6. 3
  7. 333333333333333333
  8. 4
  9. 444444444444444444
复制代码
  1. [root@ ~]$ sed = file | sed 'N;s/\n/:/'
  2. 1:111111111111111111
  3. 2:222222222222222222
  4. 3:333333333333333333
  5. 4:444444444444444444
复制代码
我对sed 'N;s/\n/:/' 这句想不通,它是怎么知道1,2,3,4是他的匹配的,我们知道这个N是查找到内容然后读取新的行,比如我查找1,那么N就执行了
  1. [root@ ~]$ sed = file | sed '/1/N;s/\n/:/'
  2. 1:111111111111111111
  3. 2
  4. 222222222222222222
  5. 3
  6. 333333333333333333
  7. 4
  8. 444444444444444444
复制代码
而sed 'N;s/\n/:/' 都没有查找1,2,3,4的,请高手解答下这个疑问

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
2 [报告]
发表于 2012-11-16 10:17 |只看该作者
本帖最后由 yestreenstars 于 2012-11-16 10:23 编辑

N就是读取下一行的数据并粘贴在当前行的下面。比如,sed处理第一行数据时,把第二行的数据粘贴在第一行的数据下面:
1
111111111111111111

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
3 [报告]
发表于 2012-11-16 10:33 |只看该作者
回复 2# yestreenstars


    可能你还理解我说什么
   sed '/1/N;s/\n/:/'  这个因为查找了1,所以会把下一行的内容黏贴到上一行
   sed 'N;s/\n/:/' 这个没有查找内容,却能查找到1,2,3,4的行并把他们的下一行黏贴到上一行。是不是sed的N参数默认规则是在不查找内容的情况下,对文本进行了从头到尾的读取,
sed 'N;s/\n/:/'的完整表达式应该是怎样的

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
4 [报告]
发表于 2012-11-16 10:44 |只看该作者
现在发现提问问题比回答问题难多了,提问问题要想好怎么把问题表达好,而回答问题只需要结果

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
5 [报告]
发表于 2012-11-16 10:49 |只看该作者
谁跟你说N一定要查找到内容才起作用的?你自己man sed看。

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
6 [报告]
发表于 2012-11-16 11:09 |只看该作者

  1. n N    Read/append the next line of input into the pattern space.
复制代码

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
7 [报告]
发表于 2012-11-16 12:08 |只看该作者
学习了。今天收获了一个sed的模式空间
sed在处理文件的时候,会把当前行存放在模式空间里面,每处理完一行,模式空间中的行就被送往屏幕,然后清空模式空间中的内容并把下一行再次放入。

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
8 [报告]
发表于 2012-11-19 13:13 |只看该作者
理解了PATTERN SPACE, HOLD SPACE, 以及N,P,D,G,H,n, p, d, g, h, x几个指令的作用,还有SED的工作方式(从文件中读入一行,用输入的所有命令处理完,打印出来;再读出一行,重复以前操作),一切便了然啦,剩下就是看自己的逻辑思维能力和运用技巧

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
9 [报告]
发表于 2012-11-19 13:17 |只看该作者
理解了PATTERN SPACE, HOLD SPACE, 以及N,P,D,G,H,n, p, d, g, h, x几个指令的作用

顺便给你补充一个,还有个ta
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP