sed语法格式

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  会把文件删空变成空文件


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
\ 1 u\ 1i\1o\1
\(abc\)t\(cba\)u\1i\2o\2
2.扩展正则
(abc)t\1u\1i\1o\1
(abc)t(cba)u\1i\2o\2


[root@stu ~]# cat a.txt 
192.168.0.1
192.168.0.2
192.168.0.8
[root@stu ~]# 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
##################################################
[root@svr5 data]# cat /etc/passwd | wc -l
35
[root@svr5 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"
do
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值