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
5 查询示例
例1:查询第5行
sed -n "5p" /test1.txt
查询第5行到第8行
sed -n "5,8p" /test1.txt
例2:查询字符串ch1
sed -n "/ch1/p" /test1.txt
例3:正则表达式查询,查询h2结尾的行
sed -n "/h2$/p" /test1.txt
6 添加示例
例1:第3行之前添加 xiaobuteach.com
sed "3i xiaobuteach.com" /test1.txt
默认情况下,终端显示修改后内容,文件内容没有修改。
如果需要修改文件内容,加-i参数。
sed -i "3i xiaobuteach.com" /test1.txt
例2:第3行之后添加 xiaobuteach.com
sed "3a xiaobuteach.com" /test1.txt
默认不修改文件;如果需要修改文件内容,加-i参数。
例3:最后一行追加 xiaobuteach.com
sed '$a\xiaobuteach.com' /test1.txt
注意事项
此处命令参数需用单引号,不能使用双引号。
其中a与追加内容之间的分隔符:可以使用\或空格。
7 删除示例
例1:删除第1行
sed "1d" /test1.txt
例2:删除含有ch1的行
sed "/ch1/d" /test1.txt
8 替换(修改)示例
例1:第3行的内容设置为com
sed '3c com' /test1.txt
例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
将文件中的xiaobuteach替换为xt
sed 's/xiaobuteach/xt/' /test1.txt
默认,只替换每行的第一个匹配的字符串。
子命令中设置g,表示替换每行的所有匹配的字符串。
sed 's/xiaobuteach/xt/g' /test1.txt