sed命令详解及demo
sed:修改替换文件内容,擅长对文件中的行进行操作
字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作
PS:全屏编辑工具 vi/vim
sed命令作用说明
-
擅长对行进行操作
-
擅长将文件的内容信息进行修改调整/删除
-
具体功能作用:增删改查
语法信息:
命令 参数 条件-处理 处理文件信息
sed -n '/oldboy/p' 1.txt
条件+处理=指令
执行原理:把所有内容都一行一行进行筛选通过条件后的放入模式空间。所有行都筛选完成后将模式空间里的内容再拿出来
-
参数
参数 解释 n 只打印出搜索的内容 i 修改文件生效(将内存中的信息覆盖到磁盘中),不要将n和i同时使用,否则会将文件内容只变成了修改的那一行内容。另外参数i要写在别的参数前面,后面有东西就会生成源文件的一个备份文件 e 多次执行sed命令连接 r 识别扩展正则符号 -
处理(暂存区默认有一个空行)
参数 解释 H 把模式空间的内容追加到暂存区 h 把模式空间的内容重定向到暂存区 G 取出暂存区的内容,将其复制到模式空间,追加该处的原有内容 g 取出暂存区的内容,将其复制到模式空间,覆盖该处的原有内容 i 在搜索后内容的上一行插入内容 a 在搜索后内容的下一行插入内容 c 在搜索后内容的行进行覆盖内容 w 在搜索后内容的行进行写入新文件 d 删除行 {n;d} 匹配某一行然后删除它的下一行 p 输出信息
批量修改文件后缀名
ls old*.txt | sed -r 's#(.*)txt#mv & \1jpg#g' | bash
&在这里是代表(.*)txt
查看搜索数据
-
如何进行过滤信息
#p:print. /筛选的内容/ 筛选结果将文件原内容也展示出来了,筛选的结果是又显示一次 sed "/oldboy/p" /oldboy.txt #只想要显示结果 需要加 -n n:no sed -n "/oldboy/p" /oldboy.txt
-
显示搜索的一行内容
sed -n '/old/p' 1.txt
-
显示两个搜索之间的范围内容
sed -n '/old/,/alex/p' 1.txt 将old到alex之间的所有行输出
-
显示多个搜索的单行内容
#将有old和alex的行输出出来 sed -n '/old/p;/alex/p' 1.txt
-
打印第几行内容
sed -n '2p' 1.txt
-
打印多行
sed -n '1,3p' 1.txt
-
打印IP
ip a s eth0 | sed -rn '3s#^.*net (.*)/24.*#\1#gp' 将第三行内容进行修改 修改规则放在3和p之间
添加数据
-
在第几行的下一行添加内容
sed '3a sss' 1.txt 在第三行后面添加一行sss
-
在第几行的上一行添加内容
sed '3i sss' 1.txt
-
将匹配的行写入新文件
sed '/aaa/w 新文件名' 1.txt
-
添加多行信息
sed '$a 100\n101' 1.txt 在最后一行的后面添加一行100再添加一行101
修改数据
-
如果替换的内容里有#
sed 's/#/*/g' 1.txt
-
修改文件内容
#将所有的oldboy信息修改为python vim 替换: :%s#oldboy#python#g sed 替换: sed 's#oldboy#python#g' /test.txt 但不是真正的替换,加上-i是真正的修改 sed -i 's#oldboy#python#g' /test.txt
-
既修改也备份,先备份源文件后修改源文件
sed -i.bak '/s#123#456#g/' 1.txt
-
修改第几行的内容
sed -i '4c www' 1.txt 将第四行内容修改为www
-
正则匹配内容然后匹配的行进行修改
[root@pert ~]# cat 1.txt 123 456 7289 66 77 [root@pert ~]# sed '/7/c +' 1.txt 123 456 + 66 + 将有7的行都改为+
删除数据
-
删除单行信息
sed '4d' 1.txt
-
删除多行信息
sed '2,4d' 1.txt
-
删除第三行和第六行
sed '3d;6d' 1.txt
-
取消空行显示
sed -r '/^$/d' 1.txt 或 sed -n '/./p' 1.txt 或 sed -n '/^$/!p' 1.txt
-
除了第三行其他全部删除
sed '3!d' 1.txt
-
删除并修改数据
sed '1,3d' 1.txt | sed 's#72#99#g' > 2.txt 删除1.txt第一到第三行数据 然后将72替换为99 然后将内容写入2.txt 上面的删除修改操作不会改变原1.txt内容 或 sed -e '1,3d' -e 's#72#99#g' 1.txt > 2.txt 加上-e 就是 连续操作 先删除后修改然后写入
-
正则匹配数据行进行删除
sed '/123/d' 1.txt
-
匹配某一行然后删除它的下一行
sed '/root/{n;d}' 1.txt 将匹配到的root行的下一行进行删除
暂存空间和模式空间(暂存空间默认有一行空行,追加的时候会有个多的空行)
-
将第一行内容追加在暂存空间中,然后把第一行内容在第三行进行追加
[root@pert ~]# sed '1H;3G' 1.txt
-
将第一行内容追加在暂存空间中,然后把第三行进行修改为第一行内容
[root@pert ~]# sed '1H;3g' 1.txt
-
将第一行内容重定向到暂存区,暂存区原有的一个空行就没有了只有文件第一行的内容,然后将其覆盖到最后一行
[root@pert ~]# sed '1h;$g' 1.txt
-
将第一行内容重定向到暂存区,暂存区原有的一个空行就没有了只有文件第一行的内容,然后将其覆盖到最后一行。并且文件的第一行内容也被删除了
[root@pert ~]# sed '1{h;d};$g' 1.txt
-
降低一行内容重定向到暂存区,然后从第四行开始到最后一行全部都替换为第一行的内容
[root@pert ~]# sed '1h;4,$g' 1.txt 123 456 123 123 123 123 123
-
降低一行内容重定向到暂存区,然后从第四行开始到最后一行后面都追加一行第一行的内容
[root@pert ~]# sed '1h;4,$G' 1.txt 123 456 123 7289 123 66 123 123 77 123