目录
将messages文件中11:30-12:00的日志提取出来
sed:类似于vim,就是一个文本编辑器,按行来进行编辑和处理
grep sed awk:文本三剑客都是针对文件内容的行来进行处理
sed的主要作用就是对文本内容进行增删改查
sed可以支持正则表达式,也可以支持扩展正则表达式
sed的工作原理:读取,执行,显示三个过程
读取:读取文本内容之后,会把读取到的内容存放到临时的缓冲区,又称模式空间
执行:在模式空间,根据读取的文本内容,按行执行,除非指定行号,否则会遍历所有行。依次执行,从上往下执行。
显示:执行完之后,把执行结果打印,如果要改变生效,模式空间被修改的内容会写入到指定的文件当中。只是操作,但是不最终写入文件,只展示结果,展示完之后,模式空间的数据,会立即删除。
sed的实际操作:
sed -e '操作' 文件1 -e '操作' 文件2
只对一个文件进行操作,可以不加-e
常用选项:
-e:条件操作选项
-f:指定脚本文件来处理输入的文件内容,把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容
-i:立即生效 慎用
-n:显示script处理后的结果
操作符:
s:替换 替换指定的字符
d:删除,删除指定的行
a:增加,在当前行的下一行插入指定内容
i:增加,在指定行的上一行插入指定内容
c:替换,替换整行
y:替换字符,但是替换前后的字符长度必须一致 123 456
p:打印
r:使用扩展正则
sed的核心就是改,删,增。查没有grep强大。
查:
sed ' '
sed ' ' /etc/passwd = cat /etc/passwd | sed ' ' = sed ' ' < /etc/passwd
sed自己有一个默认输出,p打印会额外再来一行
-n 禁止sed的默认输出
sed -n '=' ky30.txt
显示行号
sed -n '=;p' ky30.txt
打印指定行,寻址打印
行号的范围区间打印
行号范围打印:逗号(,)表示到,分号(;)表示和
打印奇数行和偶数行
打印偶数行
打印奇数行
文本过滤模式:
对包含指定字符串的内容进行打印
sed -n '/o/p' ky30.txt //可以是单个字符,也可以是字符串
sed -n '/big/p' ky30.txt //所有包含big的行,会全部打印
应用基础正则表达式进行打印
sed -n '/^root/p' /etc/passwd
打印以bash为结尾的行
扩展正则表达式
sed -r -n ' ' /etc/passwd
以root开头或者bash结尾的行
指定行号进行删除
sed -n '3d;p' ky30.txt //删除第三行,打印剩下来的
sed -n '1d,3d;p' ky30.txt //删除第一行和第三行,打印剩下来的
匹配字符串内容删除
sed '/o/d' ky30.txt //把包含o的行删除
sed '/o/!d' ky30.txt //除了包含o的行,其他都删掉
sed '/one/,/six/d' test.txt //把包含one到six的行全部删除,打印剩余的
sed '/one/,/six/!d' test.txt //只保留包含one到six的行,其他全部删除,打印剩余的
正则表达式删除
sed '/^$/d' ky30.txt //删除空行
sed替换
s:替换字符串
c:整行替换
y:单字符替换,前后长度要保持一致
以root开头的行替换成#root注释掉
替换字母大写
u&:转换成小写的特殊符号,在使用时,需要转义符
替换字母小写
l&:转换成小写的特殊符号,在使用时,需要转义符
u&:转换成小写的特殊符号,在使用时,需要转义符
g:全部替换,如果不加,只会更改手写字符
整行替换
y:单字符替换,前后长度要保持一致
全量替换,有多少换多少
增加
a 在下一行添加
i 在上一行添加
r 在行后读入指定文件的内容
sed命令当中字符串的位置进行交换
把中间的空格替换成下划线
vim 123.txt
vim 456.txt
将版本号提取出来
第一种方法:
第二种方法: