sed工具与正则表达式的使用(shell第四天)
2018-04-30 23:08
288 查看
sed工具 【流式编辑器】
—— 非交互,基于模式匹配过滤及修改文本—— 逐行处理,并将结果输出到屏幕——可实现对文本的输出,删除,替换,复制,剪切,导入,导出等各种操作
命令格式:1)前置命令 | sed [选项] '条件指令' 【利用管道】2)sed [选项] '条件指令' 文件.. ..
常用选项:-n 屏蔽默认输出,默认sed会输出读取文档的全部内容
-i sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响 [正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改]
-r (让sed支持扩展正则)
例:-n查看文件/etc/hosts第1行[root@server0 ~]# sed -n '1p' /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
查看/etc/passwd 3-6行[root@server0 ~]# sed -n '3,6p' /etc/passwddaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync
查看文件/etc/passwd第3行和第6行[root@server0 ~]# sed -n '3p;6p' /etc/passwddaemon:x:2:2:daemon:/sbin:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync
-i删除文件进行逐条删除【实际未对文件进行修改】[root@server0 ~]# sed 'd' /wooo.txt [root@server0 ~]# cat /wooo.txtthekncxn;zcnkdagahao thewojiaozazahuithe koa修改源文件【慎用】[root@server0 ~]# sed -i 'd' /wooo.txt[root@server0 ~]# cat /wooo.txt
二) 认识sed工具的条件# sed [选项] '条件指令' 文件.. ..
1)sed命令可以使用行号或正则做为条件匹配:
sed -n '3p' /etc/passwd 打印第3行
sed -n '3,5p' /etc/passwd 打印第3到5行
sed -n '3p;5p' /etc/passwd 打印第3和5行
sed -n '3,+10p' /etc/passwd 打印第3以及后面的10行
sed -n '1~2p' /etc/passwd 打印奇数行
sed -n '2~2p' /etc/passwd 打印偶数行
2)正则案例
【采用//把需要搜索的内容查找出来】sed -n '/root/p' /etc/passwd 打印包含root的行
sed -n '/bash$/p' /etc/passwd 打印bash结尾的行[可以登陆的用户]
三)指令集合
【打印】p sed -n 'p' a.txt 输出所有行,等同于cat a.txt sed -n '4p' a.txt 输出第4行 sed -n '4,7p' a.txt 输出第4~7行 sed -n '4,+10p' a.txt 输出第4行及其后的10行内容 sed -n '/^bin/p' a.txt 输出以bin开头的行 sed -n '$=' a.txt 输出文件的行数
[root@server0 ~]# sed -n '$=' /etc/passwd47 [后面无目录显示]
[root@server0 ~]# wc -l /etc/passwd47 /etc/passwd
【删除】d 注:练习时不需加 i ,防止文件误删!
sed '3,5d' a.txt 删除第3~5行 sed '/xml/d' a.txt 删除所有包含xml的行 sed '/xml/!d' a.txt 删除不包含xml的行,!符号表示取反 sed '/^install/d' a.txt 删除以install开头的行 sed '$d' a.txt 删除文件的最后一行 sed '/^$/d' a.txt 删除所有空行
【替换】s (s/旧内容/新内容/选项)
vim test.txt 练习环境2017 2011 20182017 2017 20242017 2017 2017
sed 's/2017/xxxx/' test.txt 替换所有行匹配的第一个2017 sed 's/2017/xxxx/g' test.txt 替换所有的2017 sed 's/2017/xxxx/2' test.txt 替换所有行匹配的第二个2017 sed 's/2017//2' test.txt 将所有行匹配的第二个2017删除 sed '2s/2017/xxx/2' test.txt 将第二行匹配的第二个2017删除 sed '2~2s/2017/xxx/g' test.txt 替换偶数行的2017 sed -n 's/2017/x[root@svr5 ~]# vim anonftp.shxxx/p' test.txt 打印 sed '4,7s/^/#/' a.txt //将第4~7行注释掉(行首加#号) sed 's/^#an/an/' a.txt //解除以#an开头的行的注释(去除行首的#号)
ifconfig | sed -n '2s/netm.*//p' | sed 's/.*t//' 查看ip 172.25.0.11
sed 's/\/bin\/bash/\sbin\/sh/' /etc/passwd
sed 's#/bin/bash#/sbin/sh/#' /etc/passwd
将首字母和尾字母调换 sed -r 's/^(.)(.*)(.)$/\3\2\1/' /wooo.txt【每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1”】
dello worlhoa ga hadio xi za za huw
将所有大写字母加大括号sed -r 's/([A-Z])/[\1]/' /wooo.txthell[O] worldd[A] ga hao[W]o xi za za hui
编写脚本:【实现自动安装ftp软件包并配置他人可访问和上传】 通过yum安装vsftpd软件包 修改vsftpd服务配置,开启匿名上传 调整/var/ftp/pub目录权限,允许ftp写入 启动vsftpd服务,并设置开机自运行
#!/bin/bashyum -y install vsftpd cp /etc/vsftpd/vsftpd.conf{,.back}sed -i 's/^#an/an/' /etc/vsftpd/vsftpd.confchmod 777 /var/ftp/pubsystemctl restart vsftpdsystemctl enable vsftpd
无法访问常见原因1)防火墙未打开2)selinux未打开3)重启服务
sed [选项] '条件指令' 文件.....选项 :-n -i -r条件:行号,/正则/指令 :p,d,s,a,i,c
a,append追加,后i,insert插入,前c,把该行删除并插入
:r 读入:w 另存为sed '2r /etc/hosts' tmp.txt 将文件tmp.txt读入到文件/etc/hosts的第二行sed 'w /root/b.txt' tmp.txt 将文件tmp.txt另存为文件root/b.txt内sed '2w/root/b.txt' tmp.txt 将 脚本:筛选用户并显示密码#!/bin/basha=`sed -n /bash$/s/:.*//p /etc/passwd`for i in $adopass=`grep $i /etc/shadow`pass1=${pass#*:}pass2=${pass1%%:*}echo "$i ------>$pass2"done 阅读更多
—— 非交互,基于模式匹配过滤及修改文本—— 逐行处理,并将结果输出到屏幕——可实现对文本的输出,删除,替换,复制,剪切,导入,导出等各种操作
命令格式:1)前置命令 | sed [选项] '条件指令' 【利用管道】2)sed [选项] '条件指令' 文件.. ..
常用选项:-n 屏蔽默认输出,默认sed会输出读取文档的全部内容
-i sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响 [正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改]
-r (让sed支持扩展正则)
例:-n查看文件/etc/hosts第1行[root@server0 ~]# sed -n '1p' /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
查看/etc/passwd 3-6行[root@server0 ~]# sed -n '3,6p' /etc/passwddaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync
查看文件/etc/passwd第3行和第6行[root@server0 ~]# sed -n '3p;6p' /etc/passwddaemon:x:2:2:daemon:/sbin:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync
-i删除文件进行逐条删除【实际未对文件进行修改】[root@server0 ~]# sed 'd' /wooo.txt [root@server0 ~]# cat /wooo.txtthekncxn;zcnkdagahao thewojiaozazahuithe koa修改源文件【慎用】[root@server0 ~]# sed -i 'd' /wooo.txt[root@server0 ~]# cat /wooo.txt
二) 认识sed工具的条件# sed [选项] '条件指令' 文件.. ..
1)sed命令可以使用行号或正则做为条件匹配:
sed -n '3p' /etc/passwd 打印第3行
sed -n '3,5p' /etc/passwd 打印第3到5行
sed -n '3p;5p' /etc/passwd 打印第3和5行
sed -n '3,+10p' /etc/passwd 打印第3以及后面的10行
sed -n '1~2p' /etc/passwd 打印奇数行
sed -n '2~2p' /etc/passwd 打印偶数行
2)正则案例
【采用//把需要搜索的内容查找出来】sed -n '/root/p' /etc/passwd 打印包含root的行
sed -n '/bash$/p' /etc/passwd 打印bash结尾的行[可以登陆的用户]
三)指令集合
【打印】p sed -n 'p' a.txt 输出所有行,等同于cat a.txt sed -n '4p' a.txt 输出第4行 sed -n '4,7p' a.txt 输出第4~7行 sed -n '4,+10p' a.txt 输出第4行及其后的10行内容 sed -n '/^bin/p' a.txt 输出以bin开头的行 sed -n '$=' a.txt 输出文件的行数
[root@server0 ~]# sed -n '$=' /etc/passwd47 [后面无目录显示]
[root@server0 ~]# wc -l /etc/passwd47 /etc/passwd
【删除】d 注:练习时不需加 i ,防止文件误删!
sed '3,5d' a.txt 删除第3~5行 sed '/xml/d' a.txt 删除所有包含xml的行 sed '/xml/!d' a.txt 删除不包含xml的行,!符号表示取反 sed '/^install/d' a.txt 删除以install开头的行 sed '$d' a.txt 删除文件的最后一行 sed '/^$/d' a.txt 删除所有空行
【替换】s (s/旧内容/新内容/选项)
vim test.txt 练习环境2017 2011 20182017 2017 20242017 2017 2017
sed 's/2017/xxxx/' test.txt 替换所有行匹配的第一个2017 sed 's/2017/xxxx/g' test.txt 替换所有的2017 sed 's/2017/xxxx/2' test.txt 替换所有行匹配的第二个2017 sed 's/2017//2' test.txt 将所有行匹配的第二个2017删除 sed '2s/2017/xxx/2' test.txt 将第二行匹配的第二个2017删除 sed '2~2s/2017/xxx/g' test.txt 替换偶数行的2017 sed -n 's/2017/x[root@svr5 ~]# vim anonftp.shxxx/p' test.txt 打印 sed '4,7s/^/#/' a.txt //将第4~7行注释掉(行首加#号) sed 's/^#an/an/' a.txt //解除以#an开头的行的注释(去除行首的#号)
ifconfig | sed -n '2s/netm.*//p' | sed 's/.*t//' 查看ip 172.25.0.11
sed 's/\/bin\/bash/\sbin\/sh/' /etc/passwd
sed 's#/bin/bash#/sbin/sh/#' /etc/passwd
将首字母和尾字母调换 sed -r 's/^(.)(.*)(.)$/\3\2\1/' /wooo.txt【每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1”】
dello worlhoa ga hadio xi za za huw
将所有大写字母加大括号sed -r 's/([A-Z])/[\1]/' /wooo.txthell[O] worldd[A] ga hao[W]o xi za za hui
编写脚本:【实现自动安装ftp软件包并配置他人可访问和上传】 通过yum安装vsftpd软件包 修改vsftpd服务配置,开启匿名上传 调整/var/ftp/pub目录权限,允许ftp写入 启动vsftpd服务,并设置开机自运行
#!/bin/bashyum -y install vsftpd cp /etc/vsftpd/vsftpd.conf{,.back}sed -i 's/^#an/an/' /etc/vsftpd/vsftpd.confchmod 777 /var/ftp/pubsystemctl restart vsftpdsystemctl enable vsftpd
无法访问常见原因1)防火墙未打开2)selinux未打开3)重启服务
sed [选项] '条件指令' 文件.....选项 :-n -i -r条件:行号,/正则/指令 :p,d,s,a,i,c
a,append追加,后i,insert插入,前c,把该行删除并插入
:r 读入:w 另存为sed '2r /etc/hosts' tmp.txt 将文件tmp.txt读入到文件/etc/hosts的第二行sed 'w /root/b.txt' tmp.txt 将文件tmp.txt另存为文件root/b.txt内sed '2w/root/b.txt' tmp.txt 将 脚本:筛选用户并显示密码#!/bin/basha=`sed -n /bash$/s/:.*//p /etc/passwd`for i in $adopass=`grep $i /etc/shadow`pass1=${pass#*:}pass2=${pass1%%:*}echo "$i ------>$pass2"done 阅读更多
相关文章推荐
- SHELL-expect、正则表达式和sed的使用
- shell中的数组、正则表达式、sed、awk的使用
- Shell脚本的编写,sed的使用以及一些正则表达式
- 正则表达式与grep、sed工具使用简介
- Linux日常——shell工具之grep(包含正则表达式)、sed
- (管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
- linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
- iphone中使用第三方工具(RegexKitLite)实现正则表达式
- bash还能使用正则表达式,以前都没留意过,都是用外部程序 sed, grep来完成的
- shell中正则表达式的使用
- shell使用正则表达式来验证数字字符
- Perl:Perl正则表达式、循环和SHELL命令结合使用。
- Shell中使用grep、sed正则提取、替换字符串
- expect正则表达式和sed的使用
- 正则表达式学习--RegexBuddy工具的使用
- shell里使用正则表达式提取括号中的内容
- 正则表达式笔记 sed工具
- Shell if中的正则表达式使用详解
- 1.shell工具sed中的正则表达式
- Shell正则表达式之grep、sed、awk实操笔记