一. 三剑客sed命令
sed - stream editor for filtering and transforming text
流编辑器工具(文件字符流进行处理编辑)
作用: 擅长对文件的行进行处理 修改编辑文件内容
语法:sed [参数] '条件 指令(如何处理)' 文件信息
sed -n '/oldboy/p' oldboy.txt
sed命令执行原理 (图)
三剑客命令:按行处理文件信息
sed命令操作实践
sed命令能完成什么事情: 增 删 改 查 ( 处理文本文件 配置文件-sed 日志文件-grep/awk)
二. 如何查询信息:
1. 需求:查询单行信息:
01. 将第3行信息进行显示
sed -n '3p' person.txt
02. 将有oldboy的行进行显示
sed -n '/oldboy/p' person.txt
2. 需求:查多行信息 -n 取消默认输出 p print 输出信息
01. 将第3行~第5行信息进行显示 区间用到: ,
sed -n '3,5p' person.txt
02. 将oldboy ~ alex信息进行显示 --注意的是会显示匹配文件的一个贪婪性
sed -n '/oldboy/,/Alex/p' person.txt
3. 只查看第3行和第5行内容
sed -n '3p;5p' person.txt
只查看有oldboy和alex信息
sed -n '/oldboy/p;/Alex/p' person.txt
三. 如何删除文件信息
01. 将第三行信息进行删除
sed -i '3d' person.txt -i 真实修改文件内容 d delete 删除文件信息
02. 将有oldboy信息的行进行删除
sed -i '/oldboy/d' person.txt
03. 将oldboy和Alex信息的行进行删除
方法一: sed '/oldboy/d;/Alex/d' person.txt
方法二:sed -r '/oldboy|Alex/d' person.txt
四. 如何增加信息
01. 在第3行后面增加新的一行 内容 oldboy62
sed '3a oldboy62' person.txt a append 在指定条件行的下面添加信息
02. 在第5行前面增加新的一行 内容 oldboy62
sed '5i oldboy62' person.txt i insert 在指定条件行的上面添加信息
03. 在第3行前面加oldboy62,同时在第5行后面加oldboy62
sed -e '3ioldboy62' -e '5aoldboy62' person.txt -e 识别多个指令信息,可以让多个指令同时执行
04. 在文件最后一行后面,添加多行信息
sed -e '$aoldboy62' person.txt
sed '$aoldboy62\noldboyedu62' person.txt
五. 替换修改文件内容:
01. 将123456 信息 显示 为 <123456>
方法1: echo 123456|sed -r 's#(.*)#<\1>#g'
方法2:echo 123456|sed 's#.*#<&>#g'
方法3:echo 123456|sed -r 's#([0-9]+)#<\1>#g'
02. 将123456 信息 显示 为 <123><456>
echo 123456|sed -r 's#([0-9]{3})#<\1>#g'
echo 123456|sed -r 's#(.{3})#<\1>#g'
03 . 将123456 信息 显示 为 <1><2><3><4><5><6>
echo 123456|sed -r 's#([0-9])#<\1>#g'
echo 123456|sed -r 's#([0-9]{1})#<\1>#g'
echo 123456|sed -r 's#(.)#<\1>#g'
六. 修改文件内容:
使用-i参数问题:
01. -i.bak 表示对源文件进行备份 -- i参数后面不能跟其他参数
sed -ri.bak 's#(.*)#<\1>#g' oldboy.txt
查看: ll oldboy.txt*
02. 在利用-i替换文件内容信息,-i参数和-n参数一定不能同时使用
替换的错误方法
sed -n '/Alex/s#COO#CEO#gp' person.txt
sed -ni.bak '/Alex/s#COO#CEO#gp' person.txt
正确替换方法
sed -i '/Alex/s#COO#CEO#g' person.txt
02. 批量修改文件扩展名称
方法一:
find /oldboy -maxdepth 1 -type f -name "oldboy*.txt"|sed -r 's#(.*)txt#mv \1txt \1jpg#g'|bash
方法二:
[root@oldboyedu62.com.cn /oldboy# ls oldboy*.txt|xargs -n1|sed -r 's#(.*)txt#mv & \1jpg#g'
方法三:利用rename
#rename "修改文件名称什么信息" "修改成什么" 修改什么文件
rename ".txt" ".jpg" oldboy*.txt
03. 取出文件权限数值信息
方法一:
stat /etc/hosts|sed -nr '4s#^A.*s: \((.*)/-.*$#\1#gp'
stat /etc/hosts|sed -n '4s#^A.*s: (\(.*\)/-.*$#\1#gp'
0644
方法二:权限
ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'
ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'|tr "rwx-" "4210"
七. 特殊替换文件内容信息:
sed -n '3s/#103/103/gp' person.txt
sed -n '3s#\#103#103#gp' person.txt
八. 修改整行信息:
sed '3coldboy62' person.txt c change 修改替换指定的整行信息
九 . 取消空行不要显示
方法一:
sed '/^$/d' person.txt
方法二:
sed -n '/^$/!p' person.txt
十 . 扩展:利用sed命令显示文件行号信息
sed '=' person.txt|xargs -n2
04. 课程知识总结
1)掌握sed命令语法结构 sed 参数 '条件 指令' 文件信息
参数:
-n 取消默认输出
-i 真实修改文件内容
-e 识别多个指令信息,可以让多个指令同时执行
-r 识别扩展正则符号信息
指令:
p print 输出信息
d delete 删除文件信息
i insert 在指定条件行的上面添加信息
a append 在指定条件行的下面添加信息
s substitute 取代==替换
g global 将所有匹配的信息都做替换(没有 将一行中第一个匹配的信息做替换)
c change 修改替换指定的整行信息
网友评论