免费注册 查看新帖 |

Chinaunix

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

sed --- n , N [复制链接]

论坛徽章:
0
51 [报告]
发表于 2008-08-03 18:19 |只看该作者

回复 #49 爱知 的帖子

你看你的1前面是不是有一个|
|1|2|3|4|5

论坛徽章:
0
52 [报告]
发表于 2008-08-03 18:19 |只看该作者
奥,知道了,前面多了一个竖线
这个
$seq 5 |sed 'H;$!d;$g;s/\n//;s/\n/\|/g'
给你的一样了

[ 本帖最后由 爱知 于 2008-8-3 18:24 编辑 ]

论坛徽章:
0
53 [报告]
发表于 2008-08-03 18:22 |只看该作者
原帖由 爱知 于 2008-8-3 18:10 发表

没有呀

$seq 5 |sed 'H;$!d;$g;s/\n/\|/g'
|1|2|3|4|5
$

前面不是多了一个回车了?
用seq 5来举例的话,其实就是N把后面一行放入模式空间,然后连续执行,结果就是变成了
1\n2
3\n4
5
然后你s/\n/\|/g一下,就成了
1|2
3|4
5
了。当然,如果直接输出seq 5|sed ':a;N;ta'的话bash会把\n转换成回车的。就显示成
1
2
3
4
5

论坛徽章:
0
54 [报告]
发表于 2008-08-03 18:23 |只看该作者
先比较一下下面两个命令的区别
seq 3 | sed 'N'
seq 4 | sed 'N'

第一条命令在最后一行多了一行,说明读到第三行的时候,即使已经没有第四行了,依然会把第四行当做空行来处理。

最后比较一下
seq 3 | sed 'n'
seq 4 | sed 'n'

结果也很有趣。

论坛徽章:
0
55 [报告]
发表于 2008-08-03 18:28 |只看该作者

回复 #53 walkerxk 的帖子

出现多一个竖线的情况,其实是H,h之间的区别
做个试验先:
seq 1 | sed 'H;g'
seq 1 | sed 'h;g'

H是append,所以添加到hold分区的时候,前面会多一个\n

论坛徽章:
0
56 [报告]
发表于 2008-08-03 18:31 |只看该作者
所以,这样写就可以有效避免这种情况发生:
1h;1!H


我也是刚刚看到ly5066113兄的写法才恍然大悟的

论坛徽章:
0
57 [报告]
发表于 2008-08-03 18:46 |只看该作者

回复 #54 eeeef 的帖子

并没有像 eeeef 兄说的那样

  1. $seq 3|sed 'N;s/\n/\|/g'
  2. 1|2
  3. 3
  4. $seq 4|sed 'N;s/\n/\|/g'
  5. 1|2
  6. 3|4
  7. $seq 4|sed 'n;s/\n/\|/g'
  8. 1
  9. 2
  10. 3
  11. 4
  12. $seq 3|sed 'n;s/\n/\|/g'
  13. 1
  14. 2
  15. 3
  16. $
复制代码

论坛徽章:
0
58 [报告]
发表于 2008-08-03 18:49 |只看该作者

回复 #57 爱知 的帖子

当行数为单的时候,我的sed执行都会多一个空行出来。

论坛徽章:
0
59 [报告]
发表于 2008-08-03 18:52 |只看该作者

回复 #53 walkerxk 的帖子

还是不太懂walkerxk兄的意思

  1. 用seq 5来举例的话,其实就是N把后面一行放入模式空间,然后连续执行,结果就是变成了
  2. 1\n2
  3. 3\n4
  4. 5
复制代码

照你的意思
应该变成:  1\n2\n3\n4\n5

论坛徽章:
0
60 [报告]
发表于 2008-08-03 18:52 |只看该作者
我这也不会,理论上是不会的,你的sed的问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP