Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4842366
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类:

2008-12-07 15:31:07

   有段时间没有上来cu了,实在说不过去,最近开始了段新生活,需要慢慢时间适应,然后好好的定个小小的plan.话不多说了,shell这东西一段时间不整似乎就忘了^_^
   大家都知道rev是反转字符串,那我们用sed也玩玩.
  

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'


例子: echo "abcd" | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

()  用于捕获匹配的内容(matching  sub-expressions)
\1,\2  分别是第一第二个()中捕获的内容(从左到右,先出现的为\1)
&   为整个匹配部分的内容,这个例子中就是\(.\)\(.*\n\)匹配的内容,即模式空间第一个\n及之前的内容
//D  的//中省略了模式串,使用前一个/x/或s/x/y/中的模式x,本例中是\(.\)\(.*\n\)
  D命令删除模式空间第一个\n及之前的内容,并开始下一次循环,注意模式空间无内容时才开始处理下一行
G  把保存空间的内容附加到模式空间中去,保存空间的默认内容是空,执行后模式空间的内容会增加一个\n

命令                            模式空间
读入新的一行                  abcd
/\n/!G                           abcd\n
s/\(.\)\(.*\n\)/&\2\1/;     abcd\nbcd\na
/\(.\)\(.*\n\)/D               bcd\na               
/\n/!G                           
s/\(.\)\(.*\n\)/&\2\1/;      bcd\nacd\nba
/\(.\)\(.*\n\)/D                cd\nba               
/\n!G
....
s/\(.\)\(.*\n\)/&\2\1/;     \ndcba
/\(.\)\(.*\n\)/D              D失败,
s/.//                             执行s/.//去掉前面的\n后输出dcba,结束一行的处理

阅读(1295) | 评论(0) | 转发(0) |
0

上一篇:SQLITE3 使用总结(2)

下一篇:VI技巧,很实用

给主人留下些什么吧!~~