一、grep
1.grep概述
文本过滤命令:grep是一种文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行;
grep:由正则表达式或者字符及基本文本字符所编写的过滤条件;
2.grep匹配字符
-E ##扩展正则表达式
grep root passwd ##模糊过滤root字符
grep -E "\ grep -E "\ grep -E -i "\ grep -E -i "^\ grep -E -i "\ grep -E "root|ROOT" passwd ##模糊过滤root和ROOT字符 3.grep匹配字符出现次数 grep -E "x.." prc ##x后至少2个字符 grep -E "x..\>" prc ##x后2个字符结尾 grep -E "x..y\>" prc ##x..y结尾ie grep -E "\ grep -E "x*y" prc ##xy之间x出现任意次 grep -E "x?y" prc ##xy之间x出现0-1次 grep -E "\ grep -E "\ grep -E "\ grep -E "\<(xy)+" prc ##以xy开头,xy字符最少出现1次 4.用grep编辑脚本ip_show.sh #!/bin/bash `ifconfig br0 > /ost/ip_file` grep -E "inet\ " /ost/ip_file | cut -d " " -f 10 二、sed 1.sed概述 行编辑器:用来操作纯ASCII码的文本 原理:处理时,把当前处理的行存储在“模式空间”(临时缓冲区),符合模式条件的处理,不符合条件的不处理,处理完成后把缓冲区内容送往屏幕;接着处理下一行,不断重复,直至文件结束; 2.p模式(显示) sed -n '/#/p' fstab ##显示文件带#的行 sed -n '/#/p' fstab -i fstab ##将显示结果覆盖掉原文件 cat -n fstab | sed -ne '3p;6p;8p' ##显示文件的3,6,8行 cat -n fstab | sed -ne '1,3!p' ##不显示文件的1-3行 3.d模式(删除) sed '1,4d' fstab ##删除文件的1、4行 sed '/^#/d' fstab ##删除文件以#开头的行 sed '/^UUID/!d' fstab ##除了以UUID开头的行都删除 4.a模式(添加) sed '/^UUID/a hello' fstab ##在以UUID开头的那一行后插入hello行 sed '/^UUID/a hello\ntest' fstab ##在以UUID开头的那一行后插入2行 5.i模式(插入) sed '/^UUID/i hello' fstab ##在以UUID开头的那一行前插入hello行 6.c模式(替换) sed '/^UUID/c hello' fstab ##将以UUID开头的那一行替换成hello行 练习脚本,改变http服务的接口 [root@foundation77 ost]# vim change_http_port.sh #!/bin/bash [ -z $1 ] && { echo please give a num for port exit 1 } sed "/^Listen/cListen\ $1" -i /etc/httpd/conf/httpd.conf systemctl restart httpd [root@foundation77 ost]# vim /etc/httpd/conf/httpd.conf [root@foundation77 ost]# sh change_http_port.sh 8080 [root@foundation77 ost]# netstat -antuple | grep http tcp6 0 0 :::8080 :::* LISTEN 0 55387 4455/httpd [root@foundation77 ost]# sh change_http_port.sh 80 [root@foundation77 ost]# netstat -antuple | grep http tcp6 0 0 :::80 :::* LISTEN 0 56426 4539/httpd 7.w模式(写入) sed '/^UUID/w /ost/test' fstab ##将文件fstab以UUID开头的那一行写入/ost/test sed -n '/^UUID/w /ost/test' fstab ##同上,但是不输出结果 sed '/^UUID/=' fstab ##将文件fstab以UUID开头的行号输出 sed '1r /ost/hello' fstab ##将/ost/hello文件写入fstab的第1行 sed '$r /ost/hello' fstab ##将/ost/hello文件写入fstab的最后1行 8.其他参数 (-n:只显示匹配空间的内容) [root@foundation77 ost]# sed -n -f prctise fstab ##对fstab执行prctise的策略 [root@foundation77 ost]# cat prctise /^UUID/p \/^UUID/= sed -n -e '/^UUID/p' fstab -e '/^UUID/=' ##同上 sed 's/s/S/g' fstab ##将fstab全文的s替换成S sed '1,3s/s/S/g' fstab ##将fstab前3行的s替换成S sed '/by/,/man/s/S/\#/g' fstab ##将fstab字符by与man之间的S替换成# sed 's@s@S@g' fstab ##@于/意义相同 sed 'G' hello ##在hello文件的每行后插入空行 sed '$!G' hello ##除了最后1行,每行后插入空行 sed '=' hello ##显示行号 [root@foundation77 ost]# sed '=' hello [root@foundation77 ost]# sed '=' hello | sed 'N;s/\n/ /g' sed -n '$p' hello ##只打印hello的最后1行 三、awk 1.awk概述 awk处理机制:逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作 2.awk参数 awk -F : 'BEGIN{print "NAME"}{print $1}' passwd ##以:为分隔符,处理前打印 NAME ,打印第1列 awk -F : 'BEGIN{print "NAME"}{print $1}END{print NR}' passwd ##以:为分隔符,处理前打印 NAME ,打印第1列,处理后打印行数(NF列) awk -F : '/bash$/{print $7}' passwd ##以:为分隔符,打印以bash结尾行的第7列 awk -F : '/bash$/' passwd ##以:为分隔符,打印以bash结尾行 awk -F : 'NR==3' passwd ##以:为分隔符,打印第3行 awk -F : 'BEGIN{print "NAME"}NR<=3&&NR>=2{print $1}' passwd ##以:为分隔符,处理前打印 NAME ,打印2-3行的第1个字符 练习: 1.打印能登陆系统且家目录不是/home的用户个数 awk -F : 'BEGIN{N=0}/$6~/^/home/&&/bash$/{N++}END{print N}' /etc/passwd 2.打印设备eth0的IP awk -F = '/IPADDR/{print $2}' /etc/sysconfig/network-scripts/ifcfg-br0 或者 ifconfig br0 | awk -F " " '/inet\ /{print $2}'