介绍

sed是stream editor(字符流编辑器)的缩写,简称流编辑器。
sed是操作、过滤和转换文本内容的强大工具。
常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定的行)。

sed工作流程图:

image.png
image.png
大致的意思就是一个文件数据,利用sed进行处理,sed会根据一定的规则条件来进行筛选其中的内容,对于满足的规则条件的可以进行增删改查,其他全部返回到原文件当中不进行修改。

语法

sed [选项] [sed内置命令字符] [输入文件]

参数

image.png
sed的内置命令符用于对文件进行不同的操作功能,如对文件增删改查。
image.png
sed匹配范围
image.png

案例

1.输出文件第2、3行内容

如果不加-n,会发现所有内容都出现了,因为默认不修改的内容是会返回的,p是为了打印内容

sed -n “2,3p” lianxi.txt

我们也可以来一个第二行和往下的三行

sed -n “2,+3p” lianxi.txt

2.过滤出含有linux的字符串行

sed -n “/linux/p” lianxi.txt

3.删除含有game的行

这里如果不加-i,只会得到一个打印出来没有game内容行的文本内容,而没有直接对文本进行修改,并且这个时候我们就不需要再进行-n了,没有意义了

sed -i “/game/d” lianxi.txt

我们也可以来个某行之下的所有内容进行删除,这里主要了解 5,$d 的用法

sed -i “5,$d” lianxi.txt

4.将文件中的My全部替换为His

sed “s/你想替换掉的内容/替换后的内容/g” ( / 还可以换成#、@,意思是一样的 )

一样的,如果我们不加入-i,得到的也只是终端数据,文本数据还是原来的样子

sed “s/My/His/g” lianxi.txt

5.追加命令操作

我们可以利用-e参数,进行多次的命令执行

sed -e “s/My/His/g” -e “s/23234/888888/g” lianxi.txt #这里就是执行了两次两种类型的替换 sed -e “s/My/His/g;s/23234/888888/g” lianxi.txt #意思是一样的,看自己习惯

6.在文件第二行后追加内容,利用a字符功能,写入到文件

这是在行后加入,如果想要行前加入,利用i内置命令,2i就是第二行之前加入

sed -i “2a balabala.” lianxi.txt

我们还可以添加多行信息(这里其实就和python当中一样了)

sed -i “2a 我可以这样加入.\n原来我还能跳行加入” lianxi.txt

另外如果不加数字呢?我们可以对所有行后面的内容进行添加

sed -i “a —————“ lianxi.txt

7.更改内容同时备份

sed -i.bak “2a balabala.” lianxi.txt #可以对操作的文件保留原文件进行备份

8.取出linux的ip地址(注意看流程)

  1. ifconfig eth0 #取出包含着ip地址的一系列有用信息
  2. sed -n “2p” #打印第二行包含ip内容的行
  3. sed “s^.*inet//“ #将ip前的内容替换为空(ip前开头都是inet)
  4. sed “s/net.*$//“ 将ip后的内容替换为空(ip后往往是net..)

    全部合在一起(去头去尾法)

    ifconfig eth0 | sed -n “2p” | sed “s^.inet//“ | sed “s/net.$//“

    我们也可以利用-e多次编辑的方式进行去头去尾

    ifconfig eth0 | sen -n -e “2s/^.inet//“ -e “2s/net.$//“