一、sed的基本用法
非交互,基于模式匹配过滤及修改文本
逐行处理,并将结果输出到屏幕
可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种操作
用法:sed [选项] '编辑指令' 文件
常用选项:
-e<script> 或 --expression=<script> 以选项中指定的script来处理输入的文本文件
-f<script文件> 或 --file=<script文件> 以选项中指定的script文件来处理输入的文本文件
-h 或 --help 显示帮助
-n 或 --quiet或--silent 仅显示处理后的结果 //常用
-V 或 --version 显示版本信息
-i 直接修改文件内容 //先测试,再使用
-r 启用扩展的正则表达式,应作为首个选项
{} 可组合多个命令,以;分隔
常用编辑命令
a :新增 a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代 c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除行 所以 d 后面通常不接任何东西
i :插入 i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :增加行 亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代 可以直接取代字符串
s/lll/zzz/ 将每行的第1个lll替换为zzz
s/lll/zzz/3 将每行的第3个lll替换为zzz
s/lll/zzz/g 将所有的lll都替换为zzz
替换操作的分隔" / " 可改用其他字符 ! @ # $ % ^ & * 便于修改文件路径
, 3到5
; 3和8
! 取反操作
[root@test opt]# cat test01.txt
1 2 3 4 5 6 7 8 99 8 7 6 5 4 3 2 1
a b c d e f
A B C D E F
1、sed 命令 -n 选项 p 输出操作
[root@test opt]# sed -n '1p' test01.txt // 打印第一行,'1p'打印第一行,但是需要加上-n才能正确输出第一行-
1 2 3 4 5 6 7 8 9 // -n 选项相当于过滤一样,如果不加 -n 就会打印文件全部内容
2) p 输出操作的一些细节
[root@test opt]# sed -n 'p' test01.txt // 输出所有行,相当于 cat test01.txt
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1
a b c d e f
A B C D E F
[root@test opt]# sed -n '4p' test01.txt // 输出第 4 行
A B C D E F
[root@test opt]# sed -n '2,4p' test01.txt //输出2~4行信息
9 8 7 6 5 4 3 2 1
a b c d e f
A B C D E F
[root@test opt]# sed -n '1p;3p' test01.txt //输出第1行和第3行
1 2 3 4 5 6 7 8 9
a b c d e f
[root@test opt]# sed -n '2,+1p' test01.txt //输出第2行及之后的1行
9 8 7 6 5 4 3 2 1
a b c d e f
[root@test opt]# sed -n '/1$/p' test01.txt //输出以1为结尾的行
9 8 7 6 5 4 3 2 1
[root@test opt]# sed -n '/^1/p' test01.txt /输出以1为开头的行
1 2 3 4 5 6 7 8 9
[root@test opt]# sed -n 'p;n' test01.txt //输出奇数行
1 2 3 4 5 6 7 8 9
a b c d e f
[root@test opt]# sed -n 'n;p' test01.txt //输出偶数行
9 8 7 6 5 4 3 2 1
A B C D E F
[root@test opt]# sed -n '2,$p' test01.txt //输出第二行直到最后一行
9 8 7 6 5 4 3 2 1
a b c d e f
A B C D E F
[root@test opt]# sed -n '$=' test01.txt //输出文本总行数
4
2、sed 命令 -i 选项 d 删除操作
1) 正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改
[root@test opt]# sed '1d' test01.txt //屏幕打印的文本已经没显示第一行,但是没加 -i选项这只是展现的结果。
9 8 7 6 5 4 3 2 1
a b c d e f
A B C D E F
[root@test opt]# cat test01.txt
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1
a b c d e f
A B C D E F
[root@test opt]# sed -i '1d' test01.txt //这时你会发现屏幕没有输出,其实第一行已经删除了
[root@test opt]# cat test01.txt
9 8 7 6 5 4 3 2 1
a b c d e f
A B C D E F
2)d 删除的一些需要掌握的技巧
sed '3,5d' test01.txt 删除第3~5行
sed '/xml/d' test01.txt 删除所有包含xml的行
sed '/xml/!d' test01.txt 删除不包含xml的行,!符号表示取反
sed '/^install/d' test01.txt 删除以install开头的行
sed '$d' test01.txt 删除文件的最后一行
sed '/^$/d' test01.txt 删除所有空行
3、简单说下 s 选项替换文本
sed 's/xml/XML/' test01.txt 将每行第一个xml替换为XML
sed 's/xml/XML/3' test01.txt 将每行中的第3隔xml替换为XML
sed 's/xml/XML/g' test01.txt 将所有的xml都替换为XML
sed 's/xml//g' test01.txt 将所有的xml都删除(替换为空串)
sed 's/doc/&s/g' test01.txt 将所有的doc都替换为docs,&代表查找串
sed '4,7s/^/#/' test01.txt 将第4~7行注释掉(行首加#号)
sed 's/^#an/an/' test01.txt 解除以#an开头的行的注释(去除行首的#号)