Linux 文件增删改查 sed

异常强大。强烈推荐。使用稍难。


sed命令用于文件内容的增删改查:新增、删改、修改、查询,非常强大。

完整英文:stream editor,流式编辑器。


流式编辑

每次读取文件的一行内容放到缓冲区,然后进行sed命令的处理,最后进行输出。


1 语法

sed [选项] 子命令 文件

从文件中读取内容,进行指定的子命令处理,子命令可设置增删改查的模式。

选项与子命令可以理解为做相应设置,各有分工,有时需配合使用。

子命令 与 文件 是必填参数。


2 常用选项

-n

子命令p用于查找文件内容,p中可以设置过滤条件:行数、搜索字符串。

加上-n后只显示匹配条件的行,否则,显示全部内容。


选项-i

默认情况下,当子命令中设置:新增、修改、删除等修改内容的模式时,只是把新内容显示出来,并不会修改文件内容。

设置-i后会修改文件内容。


选项-e

sed命令的完整语法为:

sed [其它选项] -e 子命令 文件

-e可省略不写。


通过-e可以指定多个子命令:

sed [其它选项] -e 子命令1 -e 子命令2 -e 子命令3 文件

3 常用子命令

子命令 说明 示例
p 显示内容 '5p':显示第5行。p前直接使用数值。
'/xiaobu/p':查找含指定字符串的行, 搜索字符串前后共两个双斜杠。
a 追加文本,在指定行之后添加 '3a xiaobu':第3行后添加xiaobu
i 插入文本,在指定行之前添加 '3i xiaobu':第3行前添加xiaobu
d 删除文本 '3d':删除第3行
'/xiaobu/d':删除含有指定字符串的行
c 设置第x行的文本 '3c com':第3行的内容设置为com
s 替换(修改)文本 's/string1/string2/': 将文件中的string1替换为string2。
替换字符串前中后共三个斜杠。

使用说明

a、c、s放在前面,p、d放在后面,设计的有点乱。


4 准备示例数据

准备数据

rm -rf /test1.txt
for i in {1..15};do  echo "xiaobuteach$i" >> /test1.txt; done

img


5 查询示例

例1:查询第5行

sed -n "5p" /test1.txt

img

查询第5行到第8行

sed -n "5,8p" /test1.txt

img


例2:查询字符串ch1

sed -n "/ch1/p" /test1.txt

img


例3:正则表达式查询,查询h2结尾的行

sed -n "/h2$/p" /test1.txt

img


6 添加示例

例1:第3行之前添加 xiaobuteach.com

sed "3i xiaobuteach.com" /test1.txt

img

默认情况下,终端显示修改后内容,文件内容没有修改。

如果需要修改文件内容,加-i参数。

sed -i "3i xiaobuteach.com" /test1.txt

例2:第3行之后添加 xiaobuteach.com

sed "3a xiaobuteach.com" /test1.txt

img

默认不修改文件;如果需要修改文件内容,加-i参数。


例3:最后一行追加 xiaobuteach.com

sed '$a\xiaobuteach.com' /test1.txt

注意事项

此处命令参数需用单引号,不能使用双引号。

其中a与追加内容之间的分隔符:可以使用\或空格。

img


7 删除示例

例1:删除第1行

sed "1d" /test1.txt

img


例2:删除含有ch1的行

sed "/ch1/d" /test1.txt

img


8 替换(修改)示例

例1:第3行的内容设置为com

sed '3c com' /test1.txt

img


例2:将文件中的xiaobuteach替换为xt

准备数据,每行输出3个xiaobuteach$i,中间用空隔隔开。

rm -rf /test1.txt
for i in {1..15};do  echo "xiaobuteach$i xiaobuteach$i xiaobuteach$i" >> /test1.txt; done

img


将文件中的xiaobuteach替换为xt

sed 's/xiaobuteach/xt/' /test1.txt

img

默认,只替换每行的第一个匹配的字符串。


子命令中设置g,表示替换每行的所有匹配的字符串。

sed 's/xiaobuteach/xt/g' /test1.txt

img