sed命令

mac2022-06-30  24

sed命令

1 sed

sed:流编辑器工具(文件字符流进行处理编辑)

1.1 sed作用

擅长对文件的行进行处理,修改编辑文件的内容。

1.2 语法

sed [参数] '条件 指令(如何处理)' 文件信息 sed -n '/oldboy/p' oldboy.txt

1.3 原理

按行处理文件信息

1.4 功能

增加、删除、修改、查询 擅长处理文本文件,配置文件 grep/awk擅长日志文件以下命令环境条件:cat >person.txt<<EOF                             101,oldboy,CEO                             102,zhaoyao,CTO                             103,Alex,COO                            104,yy,CFO                             105,feixue,CIO                             3p                             EOF

1.4.1 查询功能

查询单行信息:(1)将第3行信息进行显示:sed -n '3p' person.txt(2)将有oldboy的行进行显示:sed -n '/oldboy/p' person.txt查询多行信息:(1)将第3行~第5行信息进行显示:sed -n '3,5p' person.txt(2)将oldboy ~ alex信息进行显示:sed -n '/oldboy/,/Alex/p' person.txt(3)只查看第3行和第5行内容:sed -n '3p;5p' person.txt(4)只查看有oldboy和alex信息:sed -n '/oldboy/p;/Alex/p' person.txt

1.4.2 删除功能

(1)将第三行信息进行删除:sed -i '3d' person.txtsed '3d' person.txt加 -i 与不加 -i 的区别:加-i:表示是真的对硬盘中文件进行了编辑,所以会真正的删除。不加-i:表示是对内存中的信息进行了编辑,所以不会真正的删除硬盘中的信息。(2)将有oldboy信息的行进行删除:sed -i '/oldboy/d' person.txtsed '/oldboy/d' person.txt(3)将oldboy和Alex信息的行进行删除 :sed -ri.bak '/oldboy|Alex/d' person.txt-i.bak 表示对源文件进行备份 -- i参数后面不能跟其他参数sed '/oldboy/d;/Alex/d' person.txt

1.4.3 增加功能

(1)在第3行后面增加新的一行 内容 oldboy62:sed '3a oldboy62' person.txt真实修改:sed -i '3a oldboy62' person.txt(2)在第5行前面增加新的一行 内容 oldboy62:sed '5i oldboy62' person.txt真实修改:sed -i '5i oldboy62' person.txt(3)在第3行前面加oldboy62,同时在第5行后面加oldboy62:sed -e '3ioldboy62' -e '5aoldboy62' person.txt真实修改: sed -i -e '3ioldboy62' -e '5aoldboy62' person.txt(4)在文件最后一行后面,添加一行信息:sed -e '$aoldboy62' person.txt真实修改: sed -i -e '$aoldboy62' person.txt(5)在文件最后一行后面,添加多行信息: sed '$aoldboy62\noldboyedu62' person.txt$:以什么结尾 只能匹配文件内容,不能匹配名称。正则符号只能匹配文件内容,不能匹配文件名称 \n:换行符

1.4.4 替换修改文件内容功能

(1)将123456 信息 显示 为 <123456>①:echo 123456|sed -r 's#(.)#<\1>#g'②:echo 123456|sed 's#.#<&>#g'③:echo 123456|sed -r 's#([0-9]+)#<\1>#g'(2)将123456 信息 显示 为 <123><456>①:echo 123456|sed -r 's#([0-9]{3})#<\1>#g'②:echo 123456|sed -r 's#(.{3})#<\1>#g'(3)将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'修改文件内容:(1)使用-i 参数问题-i.bak:表示对源文件进行备份 -i参数后面不能跟其他参数sed -ri.bak 's#(.*)#<\1>#g' oldboy.txt(2)在利用-i替换参数文件内容信息,-i参数和-n参数一定不能同时使用替换错误使用方法:sed -ni.bak '/Alex/s#COO#CEO#gp' person.txt在这里,-n -i一块使用,-i 确定了修改的内容,-n 取消了文件其它内容,只显示-i 执行后的内容。这样会导致文件内容的丢失。所以-n -i 不能同时使用。正取使用方法:sed -i '/Alex/s#COO#CEO#g' person.txt

(2)批量修改文件扩展名称方法一:find /oldboy -maxdepth 1 -type f -name "oldboy.txt"|sed -r 's#(.)txt#mv \1txt \1jpg#g'|bash方法二:ls oldboy.txt|xargs -n1|sed -r 's#(.)txt#mv & \1jpg#g'方法三:利用rename 专业修改rename ".txt" ".jpg" oldboy*.txt

(3)取出文件数值权限信息方法一:①stat /etc/hosts|sed -nr '4s#^A.s: ((.)/-.$#\1#gp'stat /etc/hosts|sed -nr '4取出hosts文件第四行:Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)②stat /etc/hosts|sed -n '4s#^A.s: ((.)/-.$#\1#gp'方法二:ll /etc/hosts|sed -r 's#^-(.). 1.$#\1#g'll /etc/hosts|sed -r 's#^-(.). 1.$#\1#g'|tr "rwx-" "4210"

(4)特殊替换文件内容信息:①sed -n '3s/#103/103/gp' person.txt②sed -n '3s##103#103#gp' person.txt(5)修改整行内容sed '3coldboy62' person.txt(6)取消空行不要显示方法一:sed '/^$/d' person.txt方法二:sed -n '/^$/!p' person.txt(7)利用sed命令显示文件行号信息sed '=' person.txt:显示行号sed '=' person.txt|xargs -n2

1.5 总结

1.5.1 参数

-n 取消默认输出-i 真实修改文件内容-e 识别多个指令信息,可以让多个指令同时执行-r 识别扩展正则符号信息

1.5.2 指令

p print 输出信息d delete 删除文件信息i insert 在指定条件行的上面添加信息a append 在指定条件行的下面添加信息s substitute 取代==替换g global 将所有匹配的信息都做替换(没有 将一行中第一个匹配的信息做替换)c change 修改替换指定的整行信息

1.5.3 sed命令执行流程

转载于:https://www.cnblogs.com/basa/p/11136225.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)