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