🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
sed是Stream Editor(字符流编辑器)的缩写,是一个流编辑器,sed是操作、过滤和转换文本内容的强大工具,可以对文件实现快速增删改查。 sed的工作模式及特性: 每次从源文件中读取一行,然后放到sed所用到的内存缓冲空间当中(sed模式空间),编辑完后,然后把模式空间中内容,无论是否被编辑,最终的结果都输出到屏幕上 注意:默认情况,sed不修改源文件内容 工作特性: 1)默认不修改源文件,如果要直接修改源文件,只用-i 2)sed有模式空间和保持空间,默认打印模式空间的内容到标准输出 3)支持正则表达式 4) sed流编辑器,每一次读取一行文本到内存中 语法格式: sed [选项] [sed内置命令字符] [输入文件] 常用选项: -n 取消默认的sed输出,常与sed内置命令的p结合 -i 直接修改文件内容 -e 多点编辑 -f 脚本文件,从指定文件中读取编辑脚本(每行一个) -r 使用扩展正则表达式 地址定界: 1)单地址 #: 指定的行 /pattern/ 被模式匹配到的每一行 2)地址范围 #,# 从第几行到第几行 #,+# 从第几行开始,往下几行 /pattern/,/pattern2/ 常用的编辑命令: d: 删除匹配到的文本 p: 打印当前模式空间 a \: 追加文本,在指定的行后添加一行或多行文本 i \: 插入文本,在指定的行前添加一行或多行文本 c \: 把符合条件的行替换为单行或多行文本 w File : 把符合条件的行,另存为另外一个文件 s/regexp/replacement/ 用replacement替换regexp的内容,regexp可以使用正则表达式,在replacement部分可以使用特殊字符&或\1-\9 g 全局替换 sed内置命令N的作用:不会清空模式空间的内容,并且从输入文件中读取下一行数据,追加到模式空间中,两行数据以换行符\n连接。(追加匹配到行的下一行) 范例1: [root@fenfa tmp]# sed -n '/^UUID/p' fstab UUID=0fbbf910-5c9e-463e-8140-488d5588f2f5 /boot ext4 defaults 1 2 [root@fenfa tmp]# sed '/^UUID/a \# hello world' fstab (追加文本) # # /etc/fstab # Created by anaconda on Mon Aug 14 11:25:01 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/vg_fenfa-lv_root / ext4 defaults 1 1 UUID=0fbbf910-5c9e-463e-8140-488d5588f2f5 /boot ext4 defaults 1 2 # hello world [root@fenfa tmp]# echo '/etc/sysconfig/network-scripts/ifcfg-eth0/' |sed 's@[^/]\+/\?$@@' /etc/sysconfig/network-scripts/ 范例2: 1、 删除匹配到行的下一行 sed -n '/^UUID/{n;d}' /etc/fstab 2、 [root@fenfa tmp]# vim file You have mail in /var/spool/mail/root [root@fenfa tmp]# sed 'N;s/\n/\t/' file aaa bbb ccc ddd eee fff ggg hhh iii mmm 3)将yes替换成no [root@fenfa tmp]# sed -i '/disable/s#yes#no#' /etc/xinetd.d/rsync 4)[root@fenfa tmp]# echo '1234567'|sed ':a; s/\B[0-9]\{3\}\>/,&/;ta' 1,234,567