shell三剑客-----------SED

2024-01-08 21:31:36

目录

?shell编程--SED

语法与参数

具体使用实例

在指定行后面追加内容

取消与添加注释

匹配字符串(追加|插入)

文件内容修改操作—替换,将一行中匹配的内容替换为新的数据,使用命令c

文件内容删除,将文件中的指定数据删除,使用命令d

文件内容查看,将文件内容输出到屏幕,使用命令p

使用正则表达式 -r

sed小技巧


?shell编程--SED

非交互式编辑器,一次处理一行内容。(流文本编辑器)

语法与参数

?sed [options] '{command}[flags]' [filename] ? ?
?# 中括号内容必有 大括号内容可有可无
?sed  # 执行命令
?[options]  # 命令选项
?{command}[flags] ?  # sed内部选项和参数
?[filename] ? ? # 文件
?命令选项
?-e script 将脚本中指定的命令添加到处理输入时执行的命令中,  多条件,一行中要有多个操作
?-f script 将文件中指定的命令添加到处理输入时执行的命令中
?-n ? ? ?  抑制自动输出
?-i ? ? ?  编辑文件内容
?-i.bak ?  修改时同时创建.bak备份文件。
?-r ? ? ?  使用扩展的正则表达式
?! ? ? ? ? 取反 (跟在模式条件后与shell有所区别)
??
?sed常用内部命令
?a ? 在匹配后面添加
?i ? 在匹配前面添加
?p ? 打印
?d ? 删除
?s ? 查找替换
?c ? 更改
?y ? 转换 ? N D P 
??
?flags
?数字 ? ? ? ? ? ? 表示新文本替换的模式
?g: ? ? ? ? ? ? 表示用新文本替换现有文本的全部实例
?p: ? ? ? ? ? ? 表示打印原始的内容
?w filename: ? ? 将替换的结果写入文件
??

具体使用实例

在指定行后面追加内容
?#在第三行和第六行后新开一行添加nihao world
?sed -i -e '3a\nihao world' -e '6a\nihao world'  file 
?#在第三行到第六行后新开一行添加nihao world
?sed -i  '3,6a\nihao world' file
?#在第三行到第六行之前插入nihao world
?sed -i '3,6i\nihao world' file
?#在第三行和第六行末尾添加nihao world
?sed -i '3,6s/$/nihao world/' file
取消与添加注释
?#取消file文件里“#nihao world”的注释
?sed -i "/^#nihao world/s/^#//"  file
?#为file文件里“nihao world”添加注释
?sed -i "/nihao world/s/^/#/" ?  file
匹配字符串(追加|插入)
?追加
?#找到“5 root”的行,在其后新开一行追加“nihao world”
?sed -i '/5 root/a\nihao world' file
??
?插入
?#找到“5 root”的行,在其前新开一行插入“nihao world”
?sed -i '/5 root/i\nihao world' file 
文件内容修改操作—替换,将一行中匹配的内容替换为新的数据,使用命令c
?语法 sed -i 's/新内容/旧内容/g' file
?#匹配行整行的替换
?将1到3行的内容替换为nihao world
?sed -i '1,3c'\nihao world file
?#匹配字符串所在行整行的替换
?将file文件中包含“sbin”的行的内容替换为“nihao world”
?sed -i '/sbin/c\nihao world' file
文件内容删除,将文件中的指定数据删除,使用命令d
?#删除file文件中的第4到第7行
?sed -i '4,7d' file
?#删除file文件中的root
?sed -i /root/d file
文件内容查看,将文件内容输出到屏幕,使用命令p
?#打印file的内容
?sed -n 'p' file
?#打印file文件里的4到6行
?sed -n '4,6p' file
?#打印file文件里的第4行与第7行
?sed -n '4p;7p' file
?#打印file文件包含root的行
?sed -n /root/p file
使用正则表达式 -r
?打印file中以字符串"3 the"开头的行内容
?sed -n -r /^(3 the)/p file
说明:在正则表达式中如果出现特殊字符(^$.*/[]),需要以前导 “\” 号做转义

sed小技巧

?统计file有多少行
?[root@jiangnan ~]# sed -n '$=' file
?打印file内容时加上行号
?[root@jiangnan ~]# sed  '=' file
?输出包含the的所在行的行号(= 用来输出行号)
?[root@jiangnan ~]# sed -n '/the/=' test.txt 
??
?输出以PI开头的行
?[root@jiangnan ~]# sed -n '/^PI/p' test.txt 
??
?输出以数字结尾的行
?[root@jiangnan ~]# sed -n '/[0-9]$/p' test.txt 
??
?输出包含单词wood的行 \< ,\>表示单词边界
?[root@jiangnan ~]# sed -n '/\<wood\>/p' test.txt 
?a wood cross!
??
?每行开始添加#字符   
?[root@jiangnan ~]# sed 's/^/#/' test.txt 
??
?在包含the的每行行首添加#字符
?[root@jiangnan ~]# sed '/the/s/^/#/' test.txt 
??
?在每行末尾添加EOF字符
?[root@jiangnan ~]# sed 's/$/EOF/' test.txt 
??
?将3-5行所有的the替换为THE       
?[root@jiangnan ~]# sed '3,5s/the/THE/g' test.txt 
??
?将包含the的行中的o替换为O 
?[root@jiangnan ~]# sed '/the/s/o/O/g' test.txt 
??
?迁移符合条件的文本
?H 复制到剪贴板;
?g,G 将剪贴板中的数据覆盖/追加到指定行;
?w保存为文件;
?r读取指定文件;
?a 追加指定内容
??
?将包含the的行迁移到行尾(;用于多个操作)
??
?H复制到剪贴板---d删除---$G追加到行尾
?[root@jiangnan ~]# sed '/the/{H;d};$G' test.txt 
??
?将1-5行迁移到17行后
?[root@jiangnan ~]# sed '1,5{H;d};17G' test.txt 
??
?将包含the的行另存为新文件
?[root@jiangnan ~]# sed '/the/w out.file' test.txt 
??
?[root@jiangnan ~]# ls
??
?anaconda-ks.cfg  out.file  test.txt ?:wq
??
?[root@jiangnan ~]# cat out.file 
??
?在包含the每行后添加文件hostname内容
?[root@jiangnan ~]# sed '/the/r /etc/hostname' test.txt 
??
?在第3行后插入新行,内容为New
?[root@jiangnan ~]# sed '3aNew' test.txt 
??
?在包含the的每行后插入新行      
?[root@jiangnan ~]# sed '/the/aNew' test.txt 
??
?在第3行后插入多行(\n 换行符)
?[root@jiangnan ~]# sed '3aNew1\nNew2' test.txt 
?ngnan ~]# sed '1,5{H;d};17G' test.txt 
??
?将包含the的行另存为新文件
?[root@jiangnan ~]# sed '/the/w out.file' test.txt 
??
?[root@jiangnan ~]# ls
??
?anaconda-ks.cfg  out.file  test.txt ?:wq
??
?[root@jiangnan ~]# cat out.file 
??
?在包含the每行后添加文件hostname内容
?[root@jiangnan ~]# sed '/the/r /etc/hostname' test.txt 
??
?在第3行后插入新行,内容为New
?[root@jiangnan ~]# sed '3aNew' test.txt 
??
?在包含the的每行后插入新行      
?[root@jiangnan ~]# sed '/the/aNew' test.txt 
??
?在第3行后插入多行(\n 换行符)
?[root@jiangnan ~]# sed '3aNew1\nNew2' test.txt 

文章来源:https://blog.csdn.net/zbw0323/article/details/135465393
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。