参考:https://www.cnblogs.com/ftl1012/p/9250171.html
https://www.runoob.com/linux/linux-comm-sed.html
sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。
处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
sed功能命令
命令 功能 a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行 i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行 d 删除行 h 把模式空间里的内容复制到暂存缓冲区 H 把模式空间里的内容追加到暂存缓冲区 g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容 G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 l 列出非打印字符 p 打印行 n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 q 结束或退出sed r 从文件中读取输入行 ! 对所选行以外的所有行应用命令 s 用一个字符串替换另一个 g 在行内进行全局替换 w 将所选的行写入文件 x 交换暂存缓冲区与模式空间的内容 y 将字符替换为另一字符(不能对正则表达式使用y命令)
sed常见命令参数
p==print d:delete =:打印匹配行的行号 -n 取消默认的完整输出,只要需要的 -e 允许多项编辑 -i 修改文件内容 -r 不需要转义
演示使用文件/etc/passwd
只查看文件的第3行
# sed -n '3p' passwd bin:x:2:2:bin:/bin:/usr/sbin/nologin
PS:需要加参数-n如果不加会在屏幕输出文件所有内容
只查看第3行到9行
# sed -n '3,6p' passwd bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin
打印最后一行
#sed -n '$p' passwd xrdp:x:126:131::/var/run/xrdp:/usr/sbin/nologin
过滤指定字符串,显示正行内容,例如过滤出root
# sed -n "/root/p" passwd root:x:0:0:root:/root:/bin/bash
PS:过滤字符串使用//包含p代表打印输出
仅显示被匹配字符串的行号
#sed -n '/root/=' passwd 1
打印匹配的内容和行号,相当于又根据关键词查询了一次
sed -n -e '/root/p' -e '/root/=' passwd root:x:0:0:root:/root:/bin/bash 1
PS:-e允许多项编辑
在文件的某行后增加一行
#sed 4a\newline passwd
会在第4行新增一行后再输出所有
如果使用参数-n则只在屏幕输出增加的行newline
删除行
#sed '1,10d' passwd
删除1至10行把剩下的行输出至屏幕
数据搜索并删除
删除包含root的行
#sed '/root/d' passwd
数据的搜索并替换
格式如下
sed 's/要被替换的字符串/新的字符串/g'
把root字符串替换成admin
sed 's/root/admin/g' passwd
文件的修改
加参数 -i直接修改文件(危险操作慎用)
把root替换成admin并且直接修改文件,直接修改屏幕无输出
sed 's/root/admin/g' passwd -i
如果只是需要替换某一行的在s前面加行号例如
把第1行的root替换成admin,如果其他行包含root则不会替换
sed '1s/root/admin/g' passwd -i