一、概念说明
官方概念说明:
stream editor for filtering and transforming text
字符流过滤器编辑和文本字符流转换工具[En]
Character stream filter editing and text character stream conversion tools
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
二、sed功能作用说明
- 处理文件信息
- 文本文件信息(小文件)
- 日志文件信息
- 配置文件信息
- 处理文件方式
- 增加信息
- 删除信息
- 修改信息
- 查找信息
三、sed语法原理
3.1 命令语法格式
标准格式:
sed [选项] [sed指令] [文件信息]
sed [参数] '处理规则' [操作对象]
...
相关参数 参数说明 -e 允许多项编辑 -n 取消默认输出 -i 就地编辑 -r 支持拓展正则 -f 指定sed匹配规则脚本
举例说明:
sed -i 's#oldboy#oldgirl#g' oldboy.txt
命令参数: -i
命令指令: s
指令修饰: g
相同指令信息只能使用一次,想使用多次需要加上分号
sed四种定位模式如下:
1、数字定位法
eg:指定行号
sed '3d' [文件信息]
sed '2,3d' [文件信息]
2、正则定位法
eg:指定正则定位
sed '/^g/d' [文件信息]
3、数字和正则定位法
sed '3,/^g/d' [文件信息]
4、正则和正则定位法
sed '/^g/,/^j/d' [文件信息]
sed的编辑模式指令汇总如下:
d :删除
p :打印
a : 在当前行后添加一行或多行
sed '2axxx' [文件信息]
c :用新文本修改(替换)当前行
sed '2cxxx' [文件信息]
i : 在当前行之前,插入文本(单独使用时)
sed '2ixxx' [文件信息]
r : 在文件中读内容
sed '2r r.txt' [文件信息]
w : 将指定行写入文件
sed '2w w.txt' [文件信息]
y : 将字符转换成另一个字符
sed '2y/fa/FA/' [文件信息]
s : 将字符串转换成另一个字符串(每一行只替换一次)
sed 's/11/22/' [文件信息]
g : 全部执行
sed 's/11/22/g' [文件信息]
i : 忽略大小写(跟 s 模式一起使用时)
& :代表前面匹配到的内容
3.2 命令执行过程
四、sed实践操作
4.1 实践环境搭建
cat >person.txt<
4.2 命令操作实践
- 查询实践
- 单行查找
打印模式空间内容:p
取消默认输出信息:-n
最终命令执行信息:
按照行号查找: sed -n '1p' person.txt
按照信息查找: sed -n '/oldboy/p' person.txt
- 多行查找 按照连续的多行查找:
按照行号查找: sed -n '1,3p' person.txt
按照信息查找: sed -n '/oldboy/,/yy/p' person.txt
按照不连续的多行查找:
按照行号查找: sed -n '1p;3p' person.txt
按照信息查找:
sed -nr '/101|103|104/p' person.txt
sed -n '/101/p;/104/p' person.txt
- 增加实践
- 按照行号增加
文件追加信息指令(行后): a---append
文件插入信息指令(行前): i---insert
最终命令执行信息:
sed '$a106\n107' person.txt
sed '2a106\n107' person.txt
- 按照信息增加
sed '/oldboy/a106\n107' person.txt
- 删除实践
- 单行删除
删除文件信息指令: d---delete
i---input
sed -i.bak:-i参数必须写在所有参数最后面 最终命令执行信息:
按照行号删除: sed '1d' person.txt
按照信息删除: sed '/oldboy/d' person.txt
删除文件空行信息:
sed '/^$/d' person.txt
sed -n '/^$/!p' person.txt
- 多行删除
按照行号删除: sed '1,3d' person.txt
按照信息删除: sed '/oldboy/,/yy/d' person.txt
- 替换实践
- 文本替换
编辑文件信息参数: i
替换文件信息指令: s c
按行进行信息替换: g (否则只替换每行匹配的第一个信息)
最终命令执行信息:
替换文件信息: sed -i.bak 's#oldboy#oldgirl#g' person.txt
- 反向引用
扩展正则识别参数: -r
调用正则匹配信息: &
最终命令执行信息:
替换文件信息:
sed -r 's#(.*)##g' person.txt
sed -r 's#.*##g' person.txt
echo 123456|sed -r 's#[1-6]{1}##g'
echo 123456|sed -r 's#.##g'
- 相关案例
1、将nginx.conf中的注释行全部去掉
[root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf
2、将nginx.conf中每一行之前增加注释
[root@localhost ~]# sed 's/.*/# &/g' /etc/nginx/nginx.conf
3、要求一键修改本机的ip,
192.168.15.100 ---> 192.168.15.101
172.16.1.100 ---> 172.16.1.101
sed -i 's#.100#.101#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
4、将/etc/passwd中的root修改成ROOT
sed -i 's#root#ROOT#g' /etc/passwd
- 拓展实践
修饰指定信息取反: sed -n '/^$/!p' person.txt
取出文件行号信息: sed '=' person.txt
执行多个相同指令: sed -n '1p;3p;5p' person.txt
Original: https://www.cnblogs.com/JZjuechen/p/15717100.html
Author: JZEason
Title: Linux三剑客命令—sed
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524266/
转载文章受原作者版权保护。转载请注明原作者出处!