十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1.sed简介
成都创新互联网站建设服务商,为中小企业提供成都网站制作、成都网站建设、外贸营销网站建设服务,网站设计,绵阳服务器托管等一站式综合服务型公司,专业打造企业形象网站,让您在众多竞争对手中脱颖而出成都创新互联。
sed是一个面向字符流的“非交互式”编辑器,vim编译中手工对文本的操作动作大部分都可以通过sed命令来完成,这样就方便在linux下编译程序批量自动处理文件,例如分析日志文件,修改配置文件等等。
2.sed命令用法
用法:
sed [OPTION]...'script'[input-file]
常用选项:
-n :不输出模式空间中的内容至屏幕
-e script, --expression=script: 多点编辑
~]# sed -e 's@^UUID.*@@g' -e '/^[[:space:]]*$/d' /etc/fstab
-f script-file, --file=script-file 每行一个编辑命令
-r, --regexp-extended :支持使用扩展的正则表达式
-i[SUFFIX], --in-place[=SUFFIX] :直接编辑源文件
此操作有风险,请慎用!!!
script:地址定界
(1)空地址:对全文进行处理
(2)单地址:
#:指定行
/pattern/ :被此模式所匹配到的每一行
(3)地址范围:
#,#:从#到#的行
#,+#:
#,/pat1/
/pat1/,/pat2/
$ :最后一行
(4)步进: ~
1~2 :所有奇数行
2~2 :所有偶数行
编辑命令:
d :删除模式空间中的内容
p :显示模式空间中的内容
a \text :在行后面追加文本"text",支持使用\n实现多行追加
i \text :在行前面插入文本"text",支持使用\n实现多行追加
c \text :把匹配到的行替换为此处指定的文本"test"
w /PATH/TO/SOMEFILE :保存模式空间匹配到的行到指定的文件中
= :为模式匹配到的行打印行号
! :条件取反
格式: 地址定界!编辑命令
r \PATH/TO/SOMEFILE :读取指定文件的内容至当前文件被模式匹配到的行后面,一般用于文件合并
s/// :查找替换,其分隔符可自行指定,常用的有s@@@,s###等
替换标记:
g :全局替换
p :显示替换成功的行
w /PATH/TO/SOMEFILE :将替换成功的结果保存至指定文件中
用法示例:
1.在/etc/fstab文件中UUID的行前面加上注释信息
~]# sed '/^UUID/i \this is UUID' /etc/fstab
2.删除某文件的所有空红
~]# sed '/^$/d' FILE
3.删除/boot/grub2/grub.cfg文件中所有以空白字符开头的行的行首的所有空白字符
~]# sed 's@^[[:space:]]\+@@g' grub.cfg
4.在/etc/fstab文件的行尾追加信息
~]# sed '$a \sed command end' /etc/fstab
3.高级编辑命令
h : 把模式空间中的内容覆盖至保持空间中
H :把模式空间中的内容追加至保持空间中
g : 把保持空间中的内容覆盖至模式空间中
G : 把保持空间中的内容追加至模式空间中
x : 把模式空间中的内容与保持空间中互换
n : 覆盖读取匹配到的行的下一行至模式空间中
N : 追加读取匹配到的行的下一行至模式空间中
d : 删除模式空间中的行
D :删除多行模式空间中的所有行
用法示例:
~]# sed -n 'n;p' FILE :显示偶数行,";"用来分隔多个命令 ~]# sed '1!G;h;$!d' FILE :逆序显示文件的内容 ~]# sed '!$d' FILE : 取出最后一行 ~]# sed '$!N;$!D' FILE : 取出文件后两行 ~]# sed '/^$/d;G' FILE : 删除原有的所有的空白行,而后为所有的非空白行后添加一个空白行 ~]# sed 'n;d' FILE :显示奇数行 ~]# sed 'G' FILE :在原有的每行后方添加一个空白行
4.实战训练
实现每周备份一次一周内被修改过的/etc/目录下的所有文件
~]# vim /backups/bf.sh #!/bin/bash # # dir=etc-`date +%F-%H-%M-%S` mkdir -p /backups/$dir for file in `find /etc/* -mtime -7`;do cp -r $file /backups/$dir &> /dev/null done cd /backups && tar -Jcf ${dir}.tar.xz $dir && rm -rf /backups/$dir ~]# crontab -e 0 0 * * 1 /bin/bash /backups/bf.sh