一、参数说明
-r 读取扩展正则符号
-n 取消默认输出
$ 表示最后一行信息
\n 换行符
-i 真正修改文件数据内容
!p 表示对输出的内容信息进行取反
-e 读取多个指令信息
-i.bak 先备份后修改
指令信息
p 输出显示内容信息(n和p要联用)
a 在一行之后添加信息
i 在一行之前添加信息
c 整行内容进行修改
d 整行内容进行删除
s###g 对文件内容进行替换修改,单双引号都可以
-i 参数使用注意事项
- -i参数一定写在所有参数最后
- -i参数在使用时一定不能和-n参数结合使用
二、使用方法
1.1 单行查询
1.1.1 根据内容进行过滤
sed -n ‘/Alex/p’ person.txt
103,Alex,COO
1.1.2 按照行号进行过滤
sed -n ‘3p’ person.txt
103,Alex,COO
1.2 多行查询
1.2.1 按照行号进行过滤
sed -n '2,4p' person.txt 进行多行匹配(连续的)
sed -n '3p;6p' person.txt 进行多行匹配(不连续的)
1.2.2 按照内容进行匹配
进行多行匹配(连续的)
sed -n '/oldboy/,/yy/p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
进行多行匹配(不连续的)
sed -n '/Alex/p;/feixue/p' person.txt
1.2.3 过滤空行信息
2、增加信息
2.1 按照行号增加
2.1.1 向指定行的前面增加信息
sed -i '4i oldgirl01' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
oldgirl01
104,yy,CFO
105,feixue,CIO
106,yy,CFO
2.1.2 向指定行的后面增加信息
sed -i ‘4a oldgirl’ person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
oldgirl
105,feixue,CIO
106,yy,CFO
2.1.3 向指定行的后面增加多行信息
sed -i ‘4a oldgir1\noldgirl2’ person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
oldgirl
oldgir2
105,feixue,CIO
106,yy,CFO
2.1.4 添加多行内容
sed -e ‘3a oldboy03’ -e ‘5a oldboy04’ person.txt
2.1.5 文件末行添加信息
sed -i '$a oldgirl01\noldgirl02' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,yy,CFO
oldgirl01
oldgirl02
2.2 按照内容增加
2.2.1 指定内容后添加信息
sed -i ‘/Alex/a oldgirl02’ person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
oldgirl02
104,yy,CFO
105,feixue,CIO
106,yy,CFO
3、删除信息
3.1按照行号进行单行或多行删除
sed -i ‘4d’ person.txt
sed -i ‘3,4d’ person.txt
sed -i ‘3d;5d’ person.txt
3.2 按照信息进行单行或多行删除
sed -i ‘/feixue/d’ person.txt
sed -ri ‘/Alex|feixue/d’ person.txt(不连续)
sed -i ‘/oldboy/,/yy/d’ person.txt(连续)
3.3 删除文件空行信息
3.4 先备份后删除
sed -ri.bak ‘/Alex|feixue/d’ person.txt
4、修改信息
4.1 单行进行整体修改
sed -i ‘5c oldboy’ person.txt
sed -i ‘/^user/c user www;’ /etc/nginx/nginx.conf 替换以user开头的行
4.2 多行进行整体修改
sed -e ‘3c oldboy’ -e ‘6c oldgirl’ person.txt
4.3 按照指定行进行部分替换
sed -i ‘4s#Alex#goodman#g’ person.txt
4.4 根据内容进行部分替换
sed -i ‘/103/s#Alex#goodman#g’ person.txt
sed -i ‘s#oldboy#oldgirl#g’ oldboy.txt
4.5 sed后向引用前向
echo 123456|sed 's#123456#<123456>#g'
<123456>
echo 123456|sed -r 's#(.*)#<\1>#g'
<123456>
echo 123456|sed 's#.*#<&>#g'
<123456>
echo 123456|sed 's#.*#&#g'
123456
echo 123456|sed -r 's#(..)(..)(..)#<\1><\2><\3>#g'
<12><34><56>