#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新聞熱點
疑難解答