Linux(文本编辑器sed)

sed

类似于vim,是一个文本编辑器,但是sed是按行来编辑和处理

主要作用:对文本内容进行增删改查,较为强大的就是改操作

注:可以支持正则表达式,也可以支持扩展正则表达式,但不完全依赖正则表达式

sed的工作原理

包括三个过程:读取-执行-显示

读取:读取文本内容后,会把读取到的内容存放到一个临时的缓冲区(模式空间)

执行:在模式空间,根据读取的文本内容,按行执行,除非指定行号,否则会遍历所有行。依次执行,从上往下执行。

显示:执行完成之后,把执行结果打印,如果要改变生效,模式空间被修改的内容会写入到指定文件当中。如果只是操作,但是

最终不写入文件,只展示结果,展示完成之后,模式空间的数据会立即删除

sed格式和常用选项

        sed -e '操作符' 文件1 -e '操作符' 文件2

        只对一个文件操作时可不加 -e

常用选项:

-e:条件操作选项

-f:指定脚本文件来处理输入的文件内容。把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容。

-i:立即生效 慎用!!

-n:显示script处理之后的结果(禁止sed的默认输出)

操作符:需要用单引号'' 

s:替换 替换指定的字符

d:删除,删除指定的行

a:增加,在当前行的下面插入指定内容

i:增加,在指定行的上面插入指定的内容

c:替换,整行替换

y:替换,替换字符,但是替换前后的字符长度必须一致。

p:打印 (sed默认有输出)

r:使用扩展正则

sed的操作

sed查功能

sed打印指定行,寻址打印

sed -n ‘4p’ 文件名 #打印第四行

sed -n ‘$p’ 文件名 #直接打印最后一行

方式二:行号的范围区间打印

sed -n '1,3p' 文件名 #打印第一行到最第三行

sed -n '2,$p' 文件名 #打印第二行到最后一行

sed -n '2p;$p' 文件名 :打印第二行到第最后一行

行号范围打印: ,到;和

打印奇数行和偶数行:

sed -n 'n;p' 文件名 (n在前就是跳过第一行,n在后就是跳过第二行)

文本过滤模式:

第一:对包含指定字符串的内容进行打印:

sed -n ’/o/p‘ 文件名

sed -n ’/big/p‘ 文件名 #将所有包含big的行,会全部打印出来

应用基础正则表达式进行打印:

sed -n ‘/^root/p’ /etc/passwd #打印以root为开头的行

sed -n ‘/bash$/p’ /etc/passwd #打印以bash为结尾的行


 

sed删除

指定行号进行删除:

sed -n '3d;p’文件名 #删除第三行的内容,并打印剩余内容。

sed -n ‘1d;3d;p’ 文件名 #删除第一行和第三行的内容,并打印剩余内容。

sed -n ‘1d,3d;p’ 文件名 #删除第一行到第三行的内容,并打印剩余内容。

(,表示到;表示和)

sed ‘/big/d’ 文件名 #匹配字符串内容(big)进行删除

sed ‘/o/!d’ 文件名 #匹配字符串内容(o),除了o以外都进行删除

使用正则表达式进行删除:

sed ‘/^$/d’ 文件名 #删除空行

sed的替换(重点!!)

s 替换字符串:

sed -n 's/root/test/p' /etc/passwd #把当前行的第一个root替换成test

sed -n 's/root/test/gp' /etc/passwd #把当前行所有root替换成test

字母字符大小写进行替换:

l&:转换成小写的特殊符号,再使用时,需要转义符。

u&:转换成大小的特殊符号,在使用时,需要转义符

g:全部替换,如果不加,只替换首字母

sed 's/[a-z]/\u&/' 123.txt

c 整行替换:

sed '/要替换的行/c 需要替换的内容' 文件名

y单字符替换:

sed ‘y/’

sed的增加

a 在下一行添加:sed '/指定行/a 添加的内容' 文件名

i 在上一行添加:sed '/指定行/i 添加的内容' 文件名

r在行号读入指定文件的内容(在行后进行添加):

sed '/原文件当前行下/r 要读取内容的文件 ' 指定操作的文件

查看指定时间内的日志:

sed -n '/Jul 20 18:36:12/,/Jul 20 18:50:01/p' /var/log/messages 

面试题

1.文件过大该怎么办?

法1:split -l 按行来切割来处理(适用于大型文件)

法2:cat 文件名 | sed 处理 (适用于中型文件)

2.怎么样不进入文件就可以删除文件当中的内容(即免交互删除)

法1:sed -i 'd' 文件名

法2:cat /dev/null >文件名

猜你喜欢

转载自blog.csdn.net/ZZZ_CCC01/article/details/131941549