一、sed编辑器
1.1 sed概述
sed是一种流编辑器。每一次处理内容,只有确认才会生效,不确认只是把模式空间的临时数据展示给用户,然后删除。
sed编辑器会按照文本的行顺序,一行一行向下处理,直到文件的最后一行。
1.2 sed命令格式
sed -e "操作" 文件1 文件2
sed -e "操作1 ;操作2" 文件
常用选项:
-e:指定命令来处理输入的文本文件,只有一个操作-e可以省略;多个指令才用-e
-f:用特定的脚本文件来处理输入的文件
-i:即时生效(慎用)
-n:仅显示script处理后的结果
二、sed常用操作命令及选项
2.1 打印操作:'p'
sed的默认打印方式:sed自己有一个默认输出,再加上操作'p'的打印,就会重复打印
-n:禁止默认输出
打印指定行
只打印行号
输出的同时打印行号
只打印最后一行
指定连续行数打印
示例:打印1-3行
指定不连续的行数打印
示例:打印第1行和第3行
打印奇数行和偶数行
对文本内容过滤打印
示例:打印包含o字符串的内容和th字符串的内容
使用正则表达式过滤
示例1:打印/etc/passwd下以root开头的行和以bash为结尾的行
示例2:在/etc/passwd文件中从第4行开始一直打印到第一个以bash为结尾的所在行
[root@pup1 ~]# sed -n '4,/bash$/p' /etc/passwd
使用扩展正则表达式
sed -r
示例1:打印/etc/passwd文件中包含两个'99:'的所在行
示例2:打印/etc/passwd文件下要么以root开头要么以bash结尾的所在行
2.2 删除操作:'d'
免交互删除文件内容
输入到黑洞
sed -i即时生效删除
删除指定行,打印剩余内容
删除连续多行,打印剩余内容
删除指定行至最后一行
取反的方式:
匹配字符串的内容进行的删除
匹配字符串的内容进行它们之间的行的删除
(除了他们之间的行,删除其他:在d前面加!)
使用正则表达式删除
删除或过滤出非空行
用grep
2.3 替换操作
s:替换指定字符串
格式:
sed 's/原字符/替换字符/' 指定文件
示例1:
示例2:以root为开头开始处理,若以空开头将其替换成#
将大写英文字符替换成小写
l&:转换成小写的特殊符号,在前面加上转义符
g:全部替换
将小写英文字符替换成大写
u&:转换成大写的特殊符号,在前面加上转义符
将字符串换顺序
运用扩展正则表达式加分组
c:整行替换
替换匹配字符串的所在行内容
格式:
sed '/原字符/c 替换字符' 指定文件
示例:
f:单字符替换
格式:
sed 'y/原字符/替换字符/' 指定文件
示例:
2.4 新增操作
a:在匹配行的下一行添加内容
格式:
sed '/字符串/a 添加内容' 指定文件
i:在匹配行的上一行添加内容
格式:
sed '/字符串/i 添加内容' 指定文件
r:可以从其他文件读取内容,然后在匹配行的行后添加下
格式:
sed '/字符串/r 供给文件' 指定文件
$a:直接在文本的最后一行添加内容
格式:
sed '$a 添加内容' 指定文件
$i:在最后一行和倒数第二行之间添加
2.5 -f选项:通过文件来修改文件
格式:
sed -f 指令文件 需修改文件
示例1:
示例2:将文件中的空格替换成_
三、总结练习
示例1:重亮显示文件中软件的版本(数字)
提取版本号
示例2:选择一个时间段打印其此段时间生成的日志文件