文本三剑客之sed
一、sed编辑器的概述
1、sed编辑器的概念
sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。
2、sed编辑器的工作流程
sed 的工作流程主要包括读取、执行和显示三个过程∶
- 读取∶ sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中 (又称模式空间)
- 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址, 否则sed 命令将会在所有的行上依次执行。
- 显示∶发送修改后的内容到输出流。在发送数据后, 模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。
注意∶ 默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。
二、基本用法
1、语法:sed [命令选项] ‘匹配地址 脚本命令’ 文件名或标准输出或标准输入
选项 | 功能 |
---|---|
-n | 不自动打印 |
-e | 多点编辑器 |
-f filename | 从指定文件中读取编辑脚本 |
-r,-E | 使用扩展正则表达式 |
-i.bak | 备份文件并原处编辑 |
-i | 直接修改目标文本文件 |
2、实例
2.1 sed -n
2.2 sed -e和启用正则
2.3 sed -i
2.4 sed -i.bak
2.5 打印文件内容的行号=
三、 sed编辑器有2种寻址方式
1、以数字形式表示行区间:打印指定的行
2、用文本模式来过滤出行:
3 步进:~
1~2:表示奇数行
2~2:表示偶数行
3~3:表示可以3的倍数行
四、高级空间用法
sed -n 'n;p' 表示打印偶数行,表示从第一行开始,先放入高级空间,下一行打印,反复以往,表示打印偶数行
sed -n '2,${n;p}' 表示奇数行,表示从第二行开始,先放入高级空间,下一行打印,反复以往,表示打印奇数行
脚本命令,操作
p:打印,如果是同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。
q:表示到第几行就退出,必须从第一行开始,3q就是1-3行
s:替换,替换指定字符
d:删除,删除选定的行
a:增加,在当前行下面增加一行指定内容
i:插入,在指定行上面插入一行指定内容
c:替换,将指定的行替换为指定内容(整行替换)
y:字符替换,转换前后的字符长度要一致
=:打印行号,这个是在前一行打印
r:表示读取文件内容,放入指定行后面
w:w file 保存模式匹配的行至指定文件
! :表示模式空间中匹配行取反处理
1、 p和q(打印和退出)
4.2 a和i(插入下一行和插入下一行)
4.3 (c,y)行替换和字符替换
五、搜索替代
s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
2 表示行内的第2个匹配内容
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中
I,i 忽略大小写
sed 's/root/&er/g' /etc/passwd
#&指代之前找到的内容
替换的内容应该是一个指定的存在的内容,不可以用正则表达式,这里可以用&这个符号指代前面匹配到的内容
六、分组后项引用
两种方式:
- 先匹配关键字的前后部分有什么特点
- 找到关键字的特点,将整行用正则表达式采用分组表示