sed的使用方法:(在下面提到的sed的用法,编辑文件时只修改标准输出的,并不会改变文件本身,如果需要修改后的文件可以重定向)
sed [options] '{command}' [filename]
其中常见的options:
n:不打印编辑行到标准输出,默认情况下是打印所有输出(编辑和未编辑)
使用sed在文本中定位文本的方式:
x x为一行号,比如1
x,y 表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/ 查询包含模式的行,如/disk/或/[a-z]/
/pattern/pattern/ 查询包含两个模式的行,如/disk/disks/
/pattern/,x 在给定行号上查询包含模式的行,如/disk/,3
x,/pattern/ 通过行号和模式查询匹配行,如 3,/disk/
x,y! 查询不包含指定号x和y的行
基本sed编辑命令:
p 打印匹配行 c\ 用新文本替换定位文本
= 显示文件行号 s 使用替换模式替换相应模式
a\ 在定位行号后附加新文本信息 r 从另一个文本中读文本
i\ 在定位行号前插入新文本信息 w 写文本到一个文件
d 删除定位行 q 第一个模式匹配完成后退出或立即退出
l 显示与八进制ASCII代码等价的控制字符 y 传送字符
n 从另一个文本中读文本下一行,并附加在下一行 {} 在定位行执行的命令组
g 将模式2粘贴到/pattern n/
快速一行命令:
's//.$//g' 删除以句点结尾行
'-e /abcd/d' 删除包含abcd的行
's/[][][]*/[]/g' 删除一个以上空格,用一个空格代替
's/^[][]*//g' 删除行首空格
's//.[][]*/[]/g' 删除句号后跟两个或更多的空格,用一个空格代替
'/^$/d' 删除空行
's/^.//g' 删除第一个字符,区别 's//.//g'删除所有的句点
's/COL/(.../)//g' 删除紧跟COL的后三个字母
's/^////g' 删除路径中第一个/
bash-2.05b$ cat sedtest
aaaaaa
bbbbb
bash-2.05b$ cat copytest
ppppp
1、显示指定行
sed -n '/aa/p' sedtest //显示含有aa的行
sed -n '1,5p' sedtest //显示1,5行
sed -n '1,/aa/p' sedtest //理应是显示第一行含有aa的,可是有点问题
sed -n '1,$p' sedtest //显示整个文件
2、在指定行插入特殊的字符
sed '1,5s/^/#/g' sedtest // 在sedtest的1到5行前加上#
3、显示匹配模式的行号
sed -n '/aa/=' sedtest
4、在每一行后面添加字符
sed 's/$/--end/g' sedtest
5、从一个文本中读取内容黏贴在另外一个文件的指定行
bash-2.05b$ sed '1r copytest' sedtest
aaaaaa
ppppp
bbbbb
6、使用a在指定行后面添加文本
bash-2.05b$ sed '1a\eee' sedtest
aaaaaa
eee
bbbbb
7、在指定行前添加一行
bash-2.05b$ sed '1i\eee' sedtest
eee
aaaaaa
bbbbb
8、代替一行或多行
bash-2.05b$ sed '1c\Hi' sedtest //第一行替换成Hi
Hi
bbbbb
bash-2.05b$ sed '1,2c\Hi' sedtest //将第1,2行替换成Hi,现在只剩1行
Hi
9、直接修改文件内容
bash-2.05b$ cat sedtest
testtesttesttesttesttest
bbbbb
cccccc
bash-2.05b$ sed -i '1s/test//g' sedtest
bash-2.05b$ cat sedtest
bbbbb
cccccc