Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2050146
  • 博文数量: 354
  • 博客积分: 4955
  • 博客等级: 上校
  • 技术积分: 4579
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-21 11:46
文章分类

全部博文(354)

文章存档

2015年(1)

2013年(4)

2012年(86)

2011年(115)

2010年(67)

2009年(81)

我的朋友

分类: LINUX

2011-11-14 20:42:14

echo -e "1\n2\n3\n4" | sed -n 'N;s/\n/ /;p'
sed先读入第一行到pattern space,然后执行N命令,将第二行追加进pattern space
这时pattern space里面就是1\n2,然后执行s/\n/ /,将换行符替换成空格,最后打印。
echo -e "1\n2\n3\n4" | sed -n 'n;s/\n/ /;p'
sed先读入第一行到pattern space,然后执行n命令,用第二行覆盖pattern space
这时pattern space里面就是2,然后执行s/\n/ /,因为pattern space里没有\n,所以不做任何替换,直接打印

[root@Mylinux tmp]# echo -e "1\n2" |sed -n 'n;p'
2
[root@Mylinux tmp]# echo -e "1\n2" |sed -n 'N;p'
1
2

seq 1 100|sed -n 'p;n'  奇数
seq 1 100|sed -n 'n;p'  偶数
seq 1 100|sed -n 'p;n;n;n'
seq 1 100|sed -n 'p;n;n;n;n'

如果sed的模式空间对应awk的$0
N相当于awk的{v=$0;next;$0=v"\n"$0}
n相当于awk的next

用shell来比喻的话
N是:  echo 下一行内容>>模式空间
n是:  echo 下一行内容>模式空间


阅读(5712) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~