linux文本操作之---sed

cat students

Paris           PS1            Charles Chin                 01/20/86              30

Indian Ocean  PS2            Susan Green                 04/05/86              32

SUST                PS2            Lewis Gray                   08/11/85               23

JUST                 IS1             Xiao Ming                     11/30/84              9

HEBUT              IS1             John Main                     12/03/84              8

SUST                PS2            Da Ming                         06/01/86              35

Paris                IS3             Peter Webor                  07/05/82              32

Paris                PS2            Ann Sreph                                   09/28/85              10

Paris                IS3             Margot Strong                             02/29/82              9 




p打印命令

1.打印,并且重复显示包含HEBUT的行.

sed '/HEBUT/p' students

2.只打印包含HEBUT的行

sed -n '/HEBUT/p' students

3.打印第4行

sed -n '4p' students

4.打印除第4行外的其它行

sed -n '4!p' students

5.打印第1行到第2行的内容

sed -n '1,2p' students

6.从第3行开始打印,直到出现以HEBUT开头的行.

sed -n '3,/^HEBUT/p' students

7.从第一个出现JUST的行打印到出现SUST的行.

sed -n '/JUST/,/SUST/p' students



d删除命令,它只会影响到输出结果,并不会影响原文件.

8.删除最后一行

sed '$d' stduents

9.删除从第4行到最后一行.

sed '4,$d' stduents


sed '/^$/d' datafile

删除空白行



s替换命令.

s/regexp/replacement/flag

其中regexp是一个正则表达式,该命令将用replacement替换由regexp匹配到的内容。flag是替换命令的选项,功能如下

flag

功能

g进行全局替换。不使用此选项将只对该行匹配到的第一个结果进行替换

p打印模式空间中的内容(替换之后的内容)

w filename将替换之后的内容写入文件filename

flag可以没有,但它前面的斜线不能丢掉。

10.sed -n 's/SUST/SDUST/gp' students

s表示替换

g表示全局,不使用这个选项将只替换此行的第一次出现的值.

p表示打印模式空间中的内容.

将所有的SUST替换为SDUST,交打印替换后的结果.

11.sed 's/[0-9][0-9]$/&.5' students

在以2个数字结尾的字符后面加.5

&表示前面匹配到的内容.如果要用&,可以加\转义.


sed -n '/^Fred/s/&***/p' datafile

查找以Fred开头的行,交替换这行的尾部为尾部***,打印出来符合条件的行.



sed 's/^\([a-zA-Z]\+\) \([a-zA-Z]\+\)\(.*\)/\2 \1\3/g' datafile 

把所有开头是:任意字母1 任意字母2所有字符  的行替换为 任意字母2 任意字母1所有字符



12.sed 's#02/29/82#02/29/83#g' students

替换02/29/82为02/29/83

当有/作为查找规则时,s后面可以跟其它的字符,但再后面的也要用同样的字符.


r读取文件

13.sed '/IS3/r newfile' students

从students文件中查找包含IS3的行,并在这行后面插入newfile的内容.


w写文件

14.sed '/IS3/w newfile' students

从stduents文件中查找包含IS3的行,并将这些行写入到newfile中,如果newfile 不存在,则创建新文件,如果存在则覆盖文件.



a追加命令,在下面插入

15.sed '/XiaoMing/a Xiao Ming is from JUST.' students

在students中查找包含XiaoMing的行,并在这行后面添加Xiao Ming is from JUST.内容.只能显示结果,并不会修改文件.

16.sed '/XiaoMing/a Xiao Ming is from JUST.\n this is 2 line.' students

在students中查找包含XiaoMing的行,并在这行后面添加Xiao Ming is from JUST.和this is 2 line.这两行内容.只能显示结果,并不会修改文件.


i插入命令,在上面插入

17.sed '/XiaoMing/i _________' students

查找包含XiaoMing的行,并在下面插入一行____________


sed '1i AAA' datafile

在行一行插入AAA


n下一行命令

18.sed '/SUST/{n;s/peter/PETER/}' students

将包含SUST的下一行的peter替换为PETER.只会输出不会改写文件.


y命令

19.sed ‘1,2y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/’ students

将前两行中所有的小写字母换为大写字母。替换是对应的,而且y命令中不能用正则表达式,因此不能写成sed ‘1,2y/[a-z]*/[A-Z]*/’。


暂存命令h 和取用命令g

20.sed –e ‘/JUST/h’ –e ‘$g’students

第一个命令将首先匹配含有JUST的行,当然sed会将其装入模式空间,然后将模式空间的内容复制到暂存缓冲区并替换原来暂存缓冲区的内容。然后sed执行第二条命令,sed将找到最后一行,当然sed会将最后一行装入模式空间,然后将暂存缓冲区的内容复制到模式空间并替换原来模式空间的内容。经过这样的处理,含有JUST的行被复制并替换了最后一行。

H命令和G命令与h和g命令的唯一不同是H和G是H将模式空间里的内容追加到暂存缓冲区,G将暂存缓冲区里的内容追加到模式空间。


21./s.d/匹配s后接一个任意字符,然后是d

sed 's/a.d//b.d/g'

把全部的s.d替换为b.d .代表一个非换行符的一个字符





21.写一个脚本

.在第1行之前插入标题PERSONNEL FILE.

.删除500结尾的行

.显示文件内容,把姓和名颠倒

.在文件末尾添加THE END

sed -e '

1i PERSONNEL FILE

/500$/d

s/^\([a-zA-Z]\+\) \([a-zA-Z]\+\)\(.*\)/\2 \1\3/g

$aTHE END

' datafile

你可能感兴趣的:(linux,sed)