sed命令详解
非交互对文本实现增 删 改 查等操作
工作方式
逐行处理
使用命令
1、前置指令 | sed 选项 (定址符)指令 2、sed 选项 (定址符)指令 被处理的文档 - 选项 -n 屏蔽默认输出 -r 支持扩展正则 -i 写入文件 - 指令 p 输出 d 删除 s 替换 i 指定行上插入文本 a 指定行下追加文本 c 替换指定的行 - 定址符 删除的文字 行号
[root@A opt]# head -5 /etc/passwd > user [root@A opt]# sed -n 'p' user # 显示第一行 [root@A opt]# sed -n '1p' user # 显示第一行 到第3行 [root@A opt]# sed -n '1,3p' user # 显示第一行 以及后两行 [root@A opt]# sed -n '1,+2p' user # 显示第一行 和 第3行 [root@A opt]# sed -n '1p;3p' user # 显示奇数行 [root@A opt]# sed -n '1~2p' user # 显示偶数行 [root@A opt]# sed -n '2~2p' user # 输出有root的行 [root@A opt]# sed -n '/root/p' user # 输出以nologin结尾的行 [root@A opt]# sed -n "/nologin$/p" user # 输出以root 或者bin 开头的行 [root@A opt]# sed -nr "/^(root|bin)/p" user # 查看最后一行的行号 [root@A opt]# sed -n "$=" user # 查看最后一行 [root@A opt]# sed -n "$p" user # 删除奇数行 [root@A opt]# sed "1~2d" user # 删除最后一行 [root@A opt]# sed "$d" user # 删除有root的行 [root@A opt]# sed "/root/d" user # 删除没有root的行 [root@A opt]# sed "/root/!d" user
s替换
s/旧内容/新内容/ 替换符 可以随便更换 主要是与内容不冲突
[root@A opt]# cat test 2017 2011 2018 2017 2017 2024 2017 2017 2017 # 替换每一行的第二个2017 [root@A opt]# sed "s/2017/xxxx/2" test # 替换每一行到第2行的第一个2017 [root@A opt]# sed "1,2s/2017/xxxx/" test # 替换每一行到第2行的第一个2017 [root@A opt]# sed "3s/2017/xxxx/3" test # 替换包含2024的行的第一个2017 [root@A opt]# sed "/2024/s/2017/xxxx/" test # 替换包含2024的行的所有2017 [root@A opt]# sed "/2024/s/2017/xxxx/g" test # 替换 [root@A opt]# sed "s#/bin/bash#/sbin/sh#g" test
编写脚本 实现部署ftp服务,并实现匿名上传
注意防火墙 selinux /etc/vsftpd/vsftpd.conf #anon_upload_enable=YES
#!/bin/bash # 安装ftp服务 并且启动匿名上传 yum -y install vsftpd sed -i "/#anon_up/s/#//" /etc/vsftpd/vsftpd.conf systemctl restart vsftpd systemctl enable vsftpd chmod 777 /var/ftp/pub
在真机打开文件夹: 输入 ftp://192.168.4.7 ,可随意拖拽普通文档到服务器即成功
sed 删除每行的第二个和最后一个字符
[root@system1 opt]# sed "s/.//2;s/.$//" test
每行的第一个与倒数第一个互换
[root@system1 opt]# sed -r "s/^(.)(.*)(.)$/\3\2\1/" test
删除所有的数字
[root@system1 opt]# sed -r "s/[0-9]//g" test
为每个大写字母添加括号
[root@system1 opt]# sed -r "s/([A-Z])/(\1)/g" test
大小写替换
[root@system1 opt]# sed "s/[a-z]/\u&/g" test [root@system1 opt]# sed "s/[a-z]/\l&/g" test
删除所有的行首空格
[root@system1 opt]# sed "s/^ +//" test
指令 i的使用
在第2行的上面添加一行 666 666
[root@system1 opt]# sed "2i 666 666" test
指令 c的使用
把第一行和第2行都替换成 666
[root@system1 opt]# sed -e "1c 666" -e "2c 666" test
#!/bin/bash # 找出使用bash登录shell的用户,列出这些用户的shadow密码记录,按每行‘用户名-->密码记录’保存到getupwd.log for i in `sed -n "/bash$/p" /etc/passwd` do a=${i%%:*} b=`sed -n "/^${a}:/p" /etc/shadow` b=${b#*:} b=${b%%:*} echo "${a}-->${b}" >> /opt/getupwd.log done #!/bin/bash # 找出使用bash登录shell的用户,列出这些用户的shadow密码记录,按每行‘用户名-->密码记录’保存到getupwd.log for i in `sed -n "/bash$/s/:.*$//p" /etc/passwd` do b=`sed -nr "/^${i}:/s/^${i}:([^:]+):.*$/\1/p" /etc/shadow` echo "${i}-->${b}" >> /opt/getupwd.log done
点赞(1)
评论留言