01.三剑客命令说明-sed命令
sed - stream editor for filtering and transforming text
可以进行文本编辑 文本过滤处理
主要用于处理文本文件,对一些配置文件进行编辑修改
02. sed命令使用方式
标准格式 sed [选项] [sed指令] [文件信息]
工作原理:
01. 按行进行过滤
02. 将过滤出来的一行内容放入到模式空间中
03. 会有默认输出(-n)
04. 一行处理完会继续处理下一行
03. sed命令使用方法
环境准备:
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF
1) 查询信息单行查找内容
根据字符内容进行过滤
sed -n '/Alex/p' person.txt
103,Alex,COO
根据行号信息进行过滤
sed -n '3p' person.txt
sed -n '4p' person.txt
多行查找内容
按照行号信息进行过滤
sed -n '2,4p' person.txt
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
按照内容信息进行过滤
sed -n '/oldboy/,/yy/p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
过滤不连续的多行信息(按照过滤的字符)
sed -n '/Alex/p' person.txt
sed -n '/feixue/p' person.txt
sed -n '/Alex/p;/feixue/p' person.txt
过滤不连续的多行信息(按照行号)
sed -n '3p;6p' person.txt
2) 增加信息
echo oldboy >>/oldboy.txt
如何向文件指定行的后面增加信息
sed '4a oldgirl' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
oldgirl
105,feixue,CIO
106,yy,CFO
sed '/Alex/a oldgirl02' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
oldgirl02
104,yy,CFO
105,feixue,CIO
106,yy,CFO
sed '4a oldgirl01\noldgirl02' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
oldgirl01
oldgirl02
105,feixue,CIO
106,yy,CFO
sed '$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
说明: $符号表示最后一行信息
如何向文件指定行的前面增加信息
sed '4a oldgirl01\noldgirl02' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
oldgirl01
oldgirl02
105,feixue,CIO
106,yy,CFO
sed '4i oldgirl01\noldgirl02' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
oldgirl01
oldgirl02
104,yy,CFO
105,feixue,CIO
106,yy,CFO
3) 删除信息
按照行号进行单行或多行删除
sed '3,4d' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
105,feixue,CIO
106,yy,CFO
按照信息进行单行或多行删除
sed -r '/Alex|feixue/d' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
104,yy,CFO
106,yy,CFO
sed -n '/^$/!p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,yy,CFO
说明: 利用!p表示对输出的内容信息进行取反
真正对文件内容进行修改编辑 加上-i参数
sed -ri.bak '/Alex|feixue/d' person.txt
cat person.txt
101,oldboy,CEO
102,zhaoyao,CTO
104,yy,CFO
106,yy,CFO
-i 参数使用注意事项
01. -i参数一定编写在所有参数之后
02. -i参数在使用使用一定不能和-n参数结合使用
一种情况: -i参数写到所有参数的前面了
sed -i.bakr '/Alex|feixue/d' person.txt
二种情况: -i参数会将屏蔽输出的信息放入到文件中
sed -rn '7s#(.*=).*#\1disabled#gp' /etc/selinux/config
SELINUX=disabled
sed -rni.bak '7s#(.*=).*#\1disabled#gp' /etc/selinux/config
cat /etc/selinux/config
SELINUX=disabled
3) 修改信息
单行进行整体修改
多行进行整体修改
sed -e '3c oldboy' -e '6c oldgirl' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
oldboy
103,Alex,COO
104,yy,CFO
oldgirl
105,feixue,CIO
106,yy,CFO
说明:
c 表示多指定行进行整体修改
-e 可以用于识别sed命令中的多个指令
单行或多行进行部分内容修改
根据内容进行修改调整:
a 按照指定行进行修改调整
sed '4s#Alex#goodman#g' person.txt
sed '/103/s#Alex#goodman#g' person.txt
b 利用正则符号进行匹配,再做调整(后向引用前向)
echo 123456|sed -r 's#(..)(..)(..)#<\1><\2><\3>#g'
<12><34><56>
echo 123456|sed -r 's#([0-9]{2})#<\1>#g'
<12><34><56>