目录
一、什么是sed编辑器
1.sed介绍
- sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流
- sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中
2.sed 流编辑器的工作过程
sed的工作流程主要包括读取、执行和显示三个过程:
- 读取: sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )
- 执行: 默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行
- 显示: 发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完
PS:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。
二、sed命令格式
1.基本格式
sed -e '操作' 文件1 文件2 ... #只有一个‘操作’时-e可以省略;多个‘操作’时不能省略
↑在命令行指定操作命令处理文件行数据
sed -n -e '操作' 文件1 文件2 #-n忽略显示过程
↑在命令行指定操作命令处理文件行数据
2.在一个脚本文件里定义操作命令
sed -f 脚本文件 目标文件 .... #-f调用指定脚本文件中的命令
↑使用指定脚本文件里的操作命令处理文件行数据
sed -i #-i修改文件原始内容
直接根据操作命令修改原文件行数据
3sed命令的常用选项
选型 | 作用 |
-e 或--expression= | 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用 |
-f 或--file= | 表示用指定的脚本文件来处理输入的文本文件 |
-h 或--help | 显示帮助 |
-n、--quiet或--silent | 禁止sed编辑器输出,但可以与p命令一起使用完成输出 |
-i | 直接修改目标文本文件 |
4.sed命令常用操作
操作符 | 作用 |
s | 替换,替换指定字符 |
d | 删除,删除选定的行 |
a | 增加,在当前行下方增加一行指定内容 |
i | 插入,在选定行上方插入一行指定内容 |
c | 替换,将选定行替换为指定内容 |
y | 字符转换,转换前后的字符长度必须相同 |
p | 打印行内容。如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用 |
= | 打印行号 |
l (小写L) | 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t) |
三、 sed命令的打印功能
1.默认打印方式
无要求的默认打印
sed -e 'p' 文件 # 'p'双重显示,显示两遍
2.防止出现重复打印
sed -n -e 'p' 文件 #打印文件的每一行
3.显示行号
sed -n '=' 文件名
4.显示行号和内容
只想要行号而不需要内容重复输出,可以使用
sed '=' 文件名
。如果需要同时输出行号和对应行的内容,请使用sed -n '=;p' 文件名
sed -n '=;p' 文件名 #输出每一行的行号及其对应的行内容
sed '=' 文件名 #只输出行号,行内容会自动打印一次
5.显示特殊符号
sed -n 'l' 文件名
四、使用地址打印
1.以数字形式打印行区间
方式一:按照行号寻求内容 (单独某一行)
[root@localhost ~]# sed -n '3p' zzz.txt
[root@localhost ~]# sed -n '5p' zzz.txt
[root@localhost ~]# sed -n '$p' zzz.txt
方式二:进行行号范围区间的打印
[root@localhost ~]# sed -n '5,8p' zzz.txt
[root@localhost ~]# sed -n '4,$p' zzz.txt
[root@localhost ~]# sed -n '6,9p' zzz.txt
方式三:指定间隔打印
[root@localhost ~]# sed -n -e '4p' -e'8p' zzz.txt
[root@localhost ~]# sed -n -e '2p' -e'$p' zzz.txt
方式四:对奇数行和偶数行的打印
[root@localhost ~]# sed -n 'n;p' zzz.txt #偶数
[root@localhost ~]# sed -n 'p;n' zzz.txt #奇数
五、文本模式过滤行内容
对包含字符串进行过滤打印
sed -n -e '/xx/p' 文件
用基础正则表达式打印
六、sed的删除操作
1.全删
sed 'd' 文件
2.通过行号进行删除
sed -e '行号区间d' 文件
3.删除空行的三种方法
- grep -v "^$" file.txt //过滤出非空行
- cat file.txt |tr -s "\n" //压缩换行符
- sed '/^$/d' file.txt //删除空行
五.sed替换功能
1.常规替换
行范围 s/旧字符串/新字符串/替换标记
2.替换标记
- 数字:表明新字符串将替换第几处匹配的地方
- g:表明新字符串将会替换所有匹配的地方
- p:打印与替换命令匹配的行,与-n一起使用
- w 文件:将替换的结果写到文件中
3.sed作打印
sed -n -e '行号区间p' #根据行号或行区间进行打印
sed -n -e '/字符串/p' #根据字符串匹配行进行打印
sed -n -r -e '/正则表达式/p' #根据正则表达式匹配行进行打印
4.打印及修改替换
sed -n -e '行号区间 s/old/new/gp' 打印被修改的行
sed -e '行号区间 s/old/new/gw 保存文件' 保存被修改的行
5.字符串替换
sed -r -e '/正则表达式/ s/old/new/g'
6.正则表达式替换
sed -r -e 's/(xxx)(xxx)(xxx)/\3\2\1/'
7.整行替换
sed -e '行号c 新行内容'
8.单字符替换
sed -e 'y/旧字符/新字符/' 新字符和旧字符的长度要一致
六.插入功能
- a(在指定行下面插入行内容)
- i(在指定行上面插入行内容)
- r(在指定行下面插入整个文件内容)
1.在行下面插入
sed -e '行号区间a 行内容'
sed -r -e '/字符串或正则/a 行内容'
2.在行上面插入
sed -e '行号区间i 行内容'
sed -r -e '/字符串或正则/i 行内容'