Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2860848
  • 博文数量: 178
  • 博客积分: 2076
  • 博客等级: 大尉
  • 技术积分: 2800
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-10 10:50
文章分类

全部博文(178)

文章存档

2010年(4)

2009年(13)

2008年(161)

我的朋友

分类: LINUX

2008-08-21 01:29:13

sed '/a/{x;p;x}' abc.txt 我这样理解对吗

 

cat abc.txt
a
b
c
d

-------------end----------
 sed  '/a/{x;p}' abc.txt
[]
[]
b
c
d
 
我的理解是以下这方面:
        
 
     /a/匹配到执行x命令 ,由于sed的自动打印功能它会打印出
sed  '/a/{x}' abc.txt  
[]                     #匹配的行已经是空行了,如果除了x外没有其它命令,它就自动打印bcd行
b
c
d
-----------
而{}加上 p    {x;p} p是打印出pattern space 的东西,而关键此时行是在[] ,pattern space
 内空为空所以会在原来的[]上生加一个空行,
测试:本行先打印,再PATTERN SPACE
 
  sed '/a/{p}' abc.txt
a
a      pattern space contents
b
c
d
 
 
 
总结:x 后 本行会变为[] ;然后如果遇到 p ,因为当前行为[] 它会在当前行加一行 [] ;
 
 sed  '2{p;}' abc.txt     
a
b
b         --pattern space
c
d
 sed  '2{x;}' abc.txt 
a
 
c
d
sed  '2{x;p}' abc.txt               x使当前行为[]
a
 
                 --pa spa
c
d
 
 
总结:两次打印的情况
 如下cat file:
 A
 B
 C
 D
 #END
sed '' file    此处用了sed 的默认打印功能
 A
 B
 C
 D
如果我再来个p
sed 'p' file
A
A    --PATTERN
B
B    --PATTERN
C
C
D
D
1。用sed命令模拟tail -40 file1
2。编写一个sed命令,给一个文件的行间距变为两倍行距
(越简洁越好,谢谢)

请教两个sed的写法

1.

CODE:
#!/bin/sh
last_line=`sed -n '$=' file1`
line=`expr ${last_line} - 39`
sed -n "${line},$"p file1

2.

CODE:
sed '$!G;$!G' file1

是不是要达到这种效果?

对于第一题我的思路是:把源文件反序排列,然后输出前40行。

CODE:
sed '1!G;h;$!d' file|sed -n '1,40'p
  如下cat file:
 A
 B
 C
 D
 #END
A     P:A  h:A    d  
B     P:(FOR G)B\nA  h:B\nA   d
C     p:(FOR G)C\nB\nA h:C\nB\nA  d
D     p:(FOR G)D\nC\nB\nA  h:D\nC\nB\nA   not d   default print
总结:G h 经常连胜来搬动数据上下行
当然了,至于怎么反序排列方法很多,不过按照楼主的意思,只用sed啦! :wink:
阅读(475) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~