文本处理工具grep

正则表达式:Regular Expression REGEXP

        由一类特殊字符及文本字符所编写的模式,表示控制或通配的功能

两类:

    基本正则表达式BRE:

    扩展正则表达式ERE:

*** grep    GLoble search Regular exression and Print out the line

     文本过滤(一定模式pattern)2

     -v    反向匹配 显示未匹配到的行

     -e    实现多个选项间的逻辑or关系

     -o    仅显示匹配到的字符本身 而不是整行

     -n  显示匹配的行号

     -c    统计匹配的行数

     -w    匹配单词

     -E    支持扩展正则表达式  egrep

     -i    忽略字符大小写

     -q –quiet  静默模式,不输出任何信息   可用$?查看命令执行情况

     -A# :after    显示匹配行及其前#行

     B# :before   匹配行及其后#行

     C# :context  匹配行及其前后#行

1.基本正则表达式元字符:

     .    任意 单个字符

     *    前面字符 任意次 可以不出现 0 – ∞

     .*   任意长度 任意字符

     \?   其前面字符 0次或一次   可有可无

     \+   其前面字符 1次或多次

     \{m,n\}    其前面字符m至n次

      \{m\}   指定出现m次   \{,n\}  至多n次

    

     []   指定范围内任意单个字符

     [^]  指定范围外的任意单个字符

     数字:[:digit:],小写字母[:lower:],大写字母[:upper:],字母[:alpha:],

     字母数字[:alnum:],标点[:punct:],空格[:space:]

      

2.位置锚定:

     ^    行首锚定,整个模式最左侧

     $   行尾锚定,整个模式最右侧

     ^pattern$    用patt匹配整行

     ^$   空白行  不可包含空格

     ^[[:space:]]*$ 空白行或包含任意空格的行

    

     \<或\b     词首锚定

     \>或\b     词尾锚定

     \<pattern\>匹配完整单词

3.分组及引用:

     \(\)     括号内的字符作为一组   \(xy\)\+  一个或多个xy 括号可嵌套不可交叉

     可用\1   \2   \3  …引用对应分组

      

*** 扩展正则表达式:          部分字符区别grep 不用加"\"

    egrep => grep -E

1.扩展正则表达式的元字符:

     .

     []

     [^]

    

     2.次数匹配:        不用加转义字符  "\"

     *

     ?

     +

     {m}

     {m,n}

3.位置锚定:

     ^

     $

     \<,\b

     \>,\b

    

4.分组及引用:

     ()

     后向引用:\1  \2  \3  …

5.或:

     a|b a或者b ;    z|Zjj   z或Zjj ;     (z|Z)jj  zjj或Zjj

    

    

     例   匹配1到255

     egrep -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>'

    

     例   passwd 用户名与shell相同的行

     egrep  "^([^:]+\>).*\1$" /etc/passwd

      

     例   简单 过滤出ip地址 不严谨

     egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"

    

===练习:grep

1.显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)

#grep -i "^s" /proc/meminfo 

#grep  "^[sS]" /proc/meminfo

2.显示/etc/passwd文件中不以/bin/bash结尾的行

#grep -v "/bin/bash$" /etc/passwd

3.显示用户rpc默认的shell程序

#grep "^rpc\>" /etc/passwd|cut -d: -f7

4.找出/etc/passwd中的两位或三位数

#grep  -o "[[:digit:]]\{2,3\}" /etc/passwd

5.显示/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行

#grep "^[[:space:]]\+[^[:space:]].*"  /etc/grub2.cfg 

6.找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行

#netstat -tan|grep "\<LISTEN[[:space:]]*$"

7.添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行

#egrep  "^([^:]+\>).*\1$" /etc/passwd

===练习:egrep

1.显示当前系统root、mage或wang用户的UID和默认shell

#egrep "^(root|mage|wang)" /etc/passwd|cut -d: -f3,7

2.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

#grep "^[[:alnum:]_]*\>()" /etc/rc.d/init.d/functions

3.使用egrep取出/etc/rc.d/init.d/functions中其基名

#echo "/etc/rc.d/init.d/functions"|grep -o "[^/]*$"

4.使用egrep取出上面路径的目录名

#echo "/etc/rc.d/init.d/functions"|egrep -o "^.*/"

5.统计以root身份登录的每个远程主机IP地址的登录次数

#who|grep "root"|grep -o "(.*)"|uniq -c

不支持正则表达式元字符:

fgrep:    fast grep  

用不到元字符时 fgrep更快

===常用工具:

#cat [OPTION]… [FILE]…查看文件内容    tac:从行尾开始显示   rev:每行字符倒叙显示

     -A:显示所有控制符

     -n: 对每一行进行编号

     -b:非空行编号

     -s:压缩连续的空行成一行

     -E: 显示行结束符$

    

#more [OPTIONS…] FILE…   分页查看文件

    -d: 显示翻页及退出提示

#less  分页查看文件  可回看

#head [OPTION]… [FILE]…  显示文件前几行  默认10行

     -c #: 指定获取前#字节

     -n #: 指定获取前#行

     -#:指定行数

#tail [OPTION]… [FILE]…  显示文件最后几行 默认10行

     -#:

     -f: 跟踪显示文件新追加的内容,常用日志监控

     -c #: 指定获取后#字节

     -n #: 指定获取后#行

         tail -n0 -f FILE $

paste [OPTION]… [FILE]…  合并两个文件同行号的列到一行

     -d 分隔符:指定分隔符,默认用TAB

     -s : 所有行合成一行显示

     paste f1 f2

     paste -s f1 f2

#wc  word count 单词统计  常和管道|一起使用

     -l    统计行数

     -w    单词数

     -c    字节数

     -m  字符数

cut 从文件中的某些行剪切片段

     -d    以指定的 字符作为 分隔符,  可以不加空格直接加字符  -d# 井号为分隔符

     -f    显示出指定字段    -f3    #:单个字段  #-#:连续多个字段  #,#离散的多个字段

     -c  按字符切割

     –output-delimiter=STRING指定输出分隔符  默认":"

#sort 排序

     -n    以数值 大小进行排序

     -tCHAR     指定分隔符

     -k#   设置比较字段          -t: -k3   冒号为分隔符 第3个字段

     -r    逆序 排序

     -f    忽略字符大小写

     -u    重复的行保留一份      连续相同为重复

#uniq 报告或移除重复的行      配合sort 统计重复出现次数

     -c    统计 每行重复次数

     -u    只显示 无重复的行

     -d    仅显示 有重复的行

#diff 逐行比较两个文件的不同       可制作补丁文件patch

     diff   file.old  file.new    

     -u 输出“统一的(unified)”diff格式文件,适用于补丁文件

    

     diff /oldpath /newpath>/patchfile  制作补丁  把diff命令结果重定向

    

     $diff -u foo.conf-broken foo.conf-works>foo.patch

     $patch -b foo.conf-broken foo.patch

    

     patch   打补丁

     -b选项来自动备份改变了的文件

     patch[OPTIONS] -i (指定补丁文件) /patchfile   /oldpath

     patch /oldpath</patchfile

===练习:cut sort tr head tail uniq

1、找出ifconfig命令结果中本机的所有IPv4地址

#ifconfig|head -2|tail -1|cut -d: -f2|cut -d" " -f1

2、查出分区空间使用率的最大百分比值

#df|tr -s " " ":" |cut -d: -f5|sort -nr|head -1

3.查出用户UID最大值的用户名、UID及shell类型

#sort -nrt: -k3 /etc/passwd|head -1|cut -d: -f1,3,7

4.查出/tmp的权限,以数字方式显示

#stat /tmp|head -4|tail -1|cut -d "(" -f2|cut -d "/" -f1

5.统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

#netstat -nt|tr -s " " ":"|cut -d: -f6|uniq -c|sort -nr

原创文章,作者:Jasper,如若转载,请注明出处:http://www.178linux.com/29031

(1)
上一篇 2016-08-04 21:40
下一篇 2016-08-04 21:40

相关推荐

  • 8.3_Linux习题和作业

    课堂习题 1.当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作? 答:不能cd进该目录 2.当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做哪些操作? 答:不能查看目录内的文件列表,不能cd,也不能查看目录里面文件的元数据 3.当用户wangcai 对/testdir 目录无写权限时,该目录下的只读文件…

    Linux干货 2016-08-05
  • iptables练习

    iptables实战 1.开启防火墙 systemctl start firewalld 2.清空所有的默认规则,定义自己的规则 iptables -F 查看此时的iptables iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD…

    2015-03-15
  • 第七周作业:bash脚本,逻辑卷管理,磁盘管理,raid管理

    第七周作业 1、创建一个10G分区,并格式为ext4文件系统; ~]#fdisk -l   #查看已有分区    设备 Boot      Start     &nbsp…

    Linux干货 2016-12-12
  • LAMP

    备注:本次安装是采用的系统自带的yum源进行安装的 第一步:安装Apache 1:安装apache,命令如下: yum install -y httpd   2:修改httpd.conf,修改ServerName的域名,具体步骤如下: 使用vi编辑器打开apache配置文件,命令如下: vi /etc/httpd/conf/httpd.conf 按…

    Linux干货 2017-10-09
  • 第十周 N21 总有刁民想害朕

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)   加电-MBR-GRUB-/sysinit-init X 对应的服务-/etc/rc.d     MBR        读取分区表     GRUB      &…

    Linux干货 2016-09-26
  • 网络管理1

    一、知识整理 1、路由转发:拆除第一层MAC地址,根据IP地址广播,收到信号后重新封装。一个路由器连接多个广播域,一个交换机连接多个冲突域。 2、网络用户应用程序:WEB浏览器;即时消息;电子邮件;协作(视频会议,vnc);web网络服务;文件网络服务;数据库服务;中间件服务(Tomcat);安全服务(netfilter)。 3、HDR:报头。Frame C…

    Linux干货 2016-09-05