#sed '$p' 文件
注意:sed -ni 会把文件删空变成空文件
send -in 不会
SED的操作指令:1.增加#sed '2a XXX' 文件 #追加append#sed '2i YYY' 文件 #插入insert2.删除#sed '2d' 文件 #删除第2行#sed '/IPADDR/d' 文件3.修改#sed '2c XXX' 文件 #change行#sed 's/旧/新/' 文件 #替换,替换1个#sed 's/旧/新/g' 文件 #替换所有脚本自动安装软件,修改配置,启动服务#vim test.sh#!/bin/bashyum -y install vsftpdsed -i '$a chroot_local_user=YES' /etc/vsftpd/vsftpd.confservice vsftpd start chkconfig vsftpd onsed 's/旧/新/' 文件sed 's# # #' 文件sed 's, , ,' 文件sed的n指令{next}读取下一行sed的s替换特殊用法#sed 's/abc/&d/' 文件把abc替换为abcd#sed 's/doc/&s/' 文件把doc替换为docs#sed 's/hmtl/<&>/' 文件#sed '/关键词/s/旧/新/' 文件#sed '/关键词/s#旧#新#' 文件
开头第一个和最后一个替换sed -r 's#^(.)(.*)(.)$#/3/2/1#' a.txt正则:正则的保留abctabcuabciabcoabcabctcbauabcicbaocba1.基本正则/(abc/)t/1u/1i/1o/1/(abc/)t/(cba/)u/1i/2o/22.扩展正则(abc)t/1u/1i/1o/1(abc)t(cba)u/1i/2o/2[root@stu ~]# cat a.txt 192.168.0.1192.168.0.2192.168.0.8[root@stu ~]# sed -r 's/192.168.0.([0-9])/172.16.0./1/' a.txt172.16.0.1172.16.0.2172.16.0.8#sed -r '/IPADDR/s#([0-9]{1,3}.){3}([0-9]{1,3})#176.137.4./2#' /etc/sysconfig/network-scripts/ifcfg-eth0# sed -r '/IPADDR/s#[0-9].*.([0-9]{1,3})#176.137.4./1#' /etc/sysconfig/network-scripts/ifcfg-eth0删除每行的第2个和最后一个字符hello the Wordni hao beijinghello#sed -r 's/^(.).(.*).$ //1/2/' txt将每行的第1个和最后一个字符互换位置#sed 's/^(.)(.*)(.)$//3/2/1/' txtsed其他功能:r读入其他文件w另存为#sed '3r b.txt' a.txt#sed '1,3w cc.txt' a.txt##################################################[root@svr5 data]# cat /etc/passwd | wc -l35[root@svr5 data]# sed -n '$=' /etc/passwd35##################################################hello the wordni hao beijinghello将第一行,复制到第2行后面#sed '1h;2G' a.txt将第一行,剪切并替换最后一行#sed '1h;1d;$g' a.txth 将数据复制到粘贴板[覆盖]H 将数据赋值到粘贴板[追加]g 将粘贴板的数据粘贴回来[覆盖]G 将粘贴板的数据粘贴回来[追加]综合案例:过滤用户名称以及对应的密码#!/bin/bashrm -rf user.tmpline=`sed -n '/bash$/p' /etc/passwd`for i in $linedo echo ${i%%:*} >>user.tmpdonefor j in `cat user.tmp`dopass1=`grep $j /etc/shadow`pass2=`echo ${pass1#*:}`pass=`echo ${pass2%%:*}`echo "$j---->$pass"done++++++++++++++++++++++++++++++++++++++版本二#!/bin/bash#user=`grep "/bin/bash" /etc/passwd |cut -d: -f1`user=`sed -n '/bash$/s/:.*//p' /etc/passwd`for i in $userdopass=$(grep $i /etc/shadow |sed 's/.*:$6/$//;s/:.*//')echo "$i 密码是:$pass"done新闻热点
疑难解答