免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
1 [报告]
发表于 2008-08-03 13:36 |显示全部楼层
原帖由 eeeef 于 2008-8-3 10:56 发表


对,再补充一下,刚才我们说的都是条件中and的方式,下面我说说or的方式,or的方式我一般使用两种:
第一种:
seq 9 | sed -n "/9\|3/p"
注意|这个要转义。

第二种:
seq 9 | sed -n -e '/9/p' -e '/3/p'

seq 9 | sed -rn "/9|3/p"
加个-r就不用转义了,还有,我一般喜欢//!d而不是-n //p因为-n //p和其他(比如s///)组合的时候很麻烦。
sed -r '/abc/!d;s/(abc).*/\1/'
如果你用p,就麻烦了。

论坛徽章:
0
2 [报告]
发表于 2008-08-03 16:02 |显示全部楼层
原帖由 eeeef 于 2008-8-3 15:47 发表
这个命令使用的极少,实用性不高。还是别琢磨了。

请用sed在一个文件的回车替换成|。
注意,不能用tr或者xargs,只能用sed。

论坛徽章:
0
3 [报告]
发表于 2008-08-03 16:16 |显示全部楼层
原帖由 爱知 于 2008-8-3 16:08 发表
sed ':a;N;s/\n/\|/;ta'

我问的是eeeef,不是你,你这么积极干嘛

论坛徽章:
0
4 [报告]
发表于 2008-08-03 16:18 |显示全部楼层
原帖由 爱知 于 2008-8-3 16:14 发表
好像 head,tail,cat,tac,rev
都可以用 sed 替换

是的,但是效率会下降,通用性的东西效率总是低。

论坛徽章:
0
5 [报告]
发表于 2008-08-03 16:31 |显示全部楼层
因为你把ta放错位置了,
而且为什么要-n ':a;N;ta;s/\n/\|/g;p'呢?直接用':a;N;ta;s/\n/\|/g'就行了。
正确的写法是:':a;N;s/\n/\|/g;ta'

论坛徽章:
0
6 [报告]
发表于 2008-08-03 17:37 |显示全部楼层
。。。你们两个欺负我一个。

论坛徽章:
0
7 [报告]
发表于 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
8 [报告]
发表于 2008-08-03 18:52 |显示全部楼层
我这也不会,理论上是不会的,你的sed的问题?

论坛徽章:
0
9 [报告]
发表于 2008-08-03 18:56 |显示全部楼层
原帖由 爱知 于 2008-8-3 18:52 发表
还是不太懂walkerxk兄的意思

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

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

也许这个命令能够帮你理解:
seq 9|sed 's/$/^M/;:a;N;ta'|xxd
0000000: 310d 0a32 0a33 0d0a 340a 350d 0a36 0a37  1..2.3..4.5..6.7
0000010: 0d0a 380a 390d 0a                        ..8.9..

论坛徽章:
0
10 [报告]
发表于 2008-08-03 18:58 |显示全部楼层
原帖由 eeeef 于 2008-8-3 18:53 发表
或许吧,回家我再试试。现在玩的是redhat9
GNU sed version 4.0.5

高手都是用redhat9.0的,像我们这些新手就用用ubuntu和fedora,还是最新版的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP