正在加载...

sed 圣经

[ 2009/07/23 14:57 | by selboo ]

1.练习文件

cat datafile
northwest         NW           Charles Main             3.0      .98    3     34
northern          WE           Sharon  Cray             5.3      .97    5     23
southnorth        SW           Lewis   Dalsass          2.7      .8     2     18
southern          SO           Suan    Chin             5.1      .95    4     15
southeast         SE           Particia Hemenway        4.0      .7     4     17
eastern           EA           TB      Savage           4.4      .7     4     20
northeast         NE           am      Main JR.         5.1      .94    3     13
north             NO           Margot   Weber           4.5      .89    5      9
central           CT           Ann      Stephens        5.7      .94    5     13
wangdongsheng     ST           Neu     Soft             8.8      .77    6      5

2. sed '/north/p' datafile
默认情况下sed会打出全部的,如果在某一行匹配到模式north ,sed会多打一遍此行.

3. sed -n 'north/p' datafile  
-n 与p命令配合使用,sed 取消了sed的缺省打印动作,如果不指定n这个选项,
sed就会从复打印north选项,如果指定了n就只打印模式north的那几行.

4. sed '3d' datafile
d命令就是删除第3行内容。

5.sed'3,$d' datafile
删除第3行到最后一行的内容。

6. sed '$d' datafile
删除最后一行.

7. sed '/north/d' datafile
删除包含所有行的north;其他的打印出来

8.sed 's/west/north/g'
把所有的west替换成north

9.sed -n 's/^west/north/p' datafile
搜索行首带west的行,并将替换为north,并打印出来

10.sed 's/[0-9][0-9]$/&.5/' datafile
与符号(&)在替换穿中时,代表查找串中匹配内容。这个例子中以两位数字结尾的行后面都被加上.5如果要在替换串中表示“与”号字面的含义,就要对起进行转义,记为:\&

11. sed -n 's/Hemenway/Jones/gp' datafile
文件中出现所有Hemenway都被替换为Jones,唯一发生变化的行被打印.选项-n与p的组合取消了缺省的输出,标志g含义在行内进行全局替换。

12. sed -n 's/\(Mar\)got/\lianne/p' datafile
扩在括号里的模式Mar作为标签1被保存与特殊寄存器中,替换串通、1引用它,Margot被替换为Marianne.

13. sed 's#3#88#g' datafile
紧跟在S命令的字符是查找和替换之间的分隔符。分隔符缺省的正斜杠,但可以改变(只在使用s命令时).无论什么字符,只要紧跟着s命令就成新的串分隔符,这个方法在查找包含正斜杠的模式时很管用,例如查找路径名和生日.

14. sed -n '/west/,/east/p' datafile
打印在west和east之间的所有行,如果west出现在east之后的某一行,则打印的范围从west所在行开始,到下一个出现east的行或文件末尾。

15. sed -n '5,/^northeast/p' datafile
打印前5行到第一个以northeast开头的行之间的所有行.

16 '/west/,/east/s/$/***WANGDONGSHENG***/' datafile
修改模式east和west之间的所有行,将各行的行尾($)替换为字符串***WANGDONGSHENG***换行符号被移动到这个新的字符串后面,箭头标出了范围.

17. sed -e '1,3d' -e 's/Hemenway/Jones' datafile
-e的作用是先删除1到3行,然后把Hemenway替换Jones,因为这是逐行编辑的(即两个命令都在模式空间上执行),所以编辑的顺序会影响结果.例如如果两条命令都是执行替换,则前一行替换会影响后一行.

18.sed -n '/north/w newfile' datafile
w命令是把指定写入文件。文件datafile中所有包含模式north的行都写到文件newfile中

19.sed '/^north  /a\\---->the north sales district has moved<---' datafile
a为追加命令,字符串the north sales district has moved被加在以north开头,north
后跟一空格的各行之后,用于追加文本必须出现在追加命令下一行上.

20.sed '/eastern/i\\NEW REGLAND REGION\\---------------------------' datafile
i命令是插入命令。如果某一行匹配到模式eastern,i命令就在该行上放插入命令中反斜
杠后的文本,除了最后一行,用于插入文本中每一行都必须以反斜杠结尾

21.sed '/eastern/{ n; s/AM/Archie/; }' datafile
如果在某一行匹配到模式eastern,n命令就是指sed用下一个输入行(即包括AM Main Jr 的那行)
替换模式空间中的当前行,用Archie替换(s)其中的AM,然后打印

22. sed'1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ' datafile
y命令把第一到第3行所有小写字母换成大写字母。正则表达式对y不起作用.

23 sed '5q' datafile
打印第5行之后,q命令让sed程序退出

24 'Lewis/{ s/Lewis/Joseph/;q; }' datafile
在某行匹配模式到Lewis时,先用Joseph替换(s)Lewis然后q命令退出

25 sed -e '/northeast/h' -e '$G' datafile
如果在某一行找到模式WE,h命令就将该行从模式缓冲区拷贝到一个暂存的缓冲区
保存在暂存缓冲区的行可以在以后被重新取出(使用命令G或g),这个例子中,当模式WE
被找到时将模式缓冲区的那份拷贝删除,

26.sed -e '/WE/{h; d; }' -e '/CT/{G; }' datafile
sed处理文件时,会把文件每一行都保存在一个临时的缓冲区中,这个缓冲区会被称为模式空间。sed处理每一行后,都会将其打印在屏幕上,除非该行被删除会被取消。之后模式空间清空,下一输入行等待处理。本例子中,被包含的模式northeast的行被找到之后,就被保存在模式空间里h命令把复制并保存到另一个缓冲区,这个特殊的缓冲区是暂存的缓冲区(holding buffer)在第二条sed命令中,sed读到最后一行($)时,G命令指示它从暂存缓冲区读出一行,将其放回模式缓冲区,追加在模式空间内当前行(本例中是最后一行)的后面

sed 's/^[]*//g' filename

sed 's/^ *//g' filename

sed 's/^[[:space:]]*//g' filename

删除以.结尾行 s/^.$//g

删除以一个以上空格,用一个空格代替 s/[][][]*/[]/g

删除空行 /^$/d

删除第一个字符 s/^.//g

删除所有空格并用Tab键代替 s/[]/[ ]//g

删除行首所有Tab键 s/^[ ]//g

删除所有Tab键 s/[ ]*//g

最后编辑: selboo 编辑于2009/10/16 08:12
Tags: ,
,
发表评论
表情
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]