sed语法格式

2/13/2017来源:经验技巧人气:1918

sed语法格式 1. sed ‘{定位}指令'  文件 2.命令 | sed '指令' #sed 'p' 文件    #显示文件的内容 #sed -n 'p' 文件 如何定位(man sed) 1.行号 #sed -n '1p' 文件 #sed -n '3p' 文件 #sed -n '1~2p' 文件 #sed -n '1,2p' 文件 2.正则 #sed -n '/ipADDR/p' 文件 #sed -n '\cIPADDRc' 文件 #sed '/\/bin\/bash/p'  文件 #sed '\c/bin/bashcp'  文件 #sed '\#/bin/bash#p'  文件

#sed '$p' 文件

注意:sed -ni  会把文件删空变成空文件

send  -in  不会

SED的操作指令: 1.增加 #sed  '2a XXX'  文件  #追加append #sed  '2i YYY'  文件  #插入insert 2.删除 #sed  '2d'  文件      #删除第2行 #sed  '/IPADDR/d'  文件 3.修改 #sed  '2c XXX' 文件   #change行 #sed  's/旧/新/' 文件  #替换,替换1个 #sed  's/旧/新/g' 文件  #替换所有 脚本自动安装软件,修改配置,启动服务 #vim test.sh #!/bin/bash yum -y install vsftpd sed -i '$a chroot_local_user=YES' /etc/vsftpd/vsftpd.conf service vsftpd start  chkconfig vsftpd on sed '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 正则:正则的保留 abctabcuabciabcoabc abctcbauabcicbaocba 1.基本正则 \(abc\)t\1u\1i\1o\1 \(abc\)t\(cba\)u\1i\2o\2 2.扩展正则 (abc)t\1u\1i\1o\1 (abc)t(cba)u\1i\2o\2 [[email protected] ~]# cat a.txt  192.168.0.1 192.168.0.2 192.168.0.8 [[email protected] ~]# sed -r 's/192.168.0.([0-9])/172.16.0.\1/' a.txt 172.16.0.1 172.16.0.2 172.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 Word ni hao beijing hello #sed -r 's/^(.).(.*).$ /\1\2/' txt 将每行的第1个和最后一个字符互换位置 #sed 's/^(.)(.*)(.)$/\3\2\1/'  txt sed其他功能: r读入其他文件 w另存为 #sed '3r b.txt'     a.txt #sed '1,3w cc.txt'  a.txt ################################################## [[email protected] data]# cat /etc/passwd | wc -l 35 [[email protected] data]# sed -n '$=' /etc/passwd 35 ################################################## hello the word ni hao beijing hello 将第一行,复制到第2行后面 #sed '1h;2G' a.txt 将第一行,剪切并替换最后一行 #sed '1h;1d;$g' a.txt h   将数据复制到粘贴板[覆盖] H   将数据赋值到粘贴板[追加] g   将粘贴板的数据粘贴回来[覆盖] G   将粘贴板的数据粘贴回来[追加] 综合案例:过滤用户名称以及对应的密码 #!/bin/bash rm -rf user.tmp line=`sed -n '/bash$/p' /etc/passwd` for i in $line do    echo ${i%%:*} >>user.tmp done for j in `cat user.tmp` do pass1=`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 $user do pass=$(grep $i /etc/shadow |sed 's/.*:$6\$//;s/:.*//') echo "$i 密码是:$pass" done