文本处理工具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

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

相关推荐

  • 权限命令总结

    修改文件权限:chmod 1 2 3 4 [root@centos7 ~]# man chmod        chmod [OPTION]… MODE[,MODE]… FILE…    …

    Linux干货 2016-08-04
  • 马哥教育网络班20期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名。 注意同一个用户登陆多次,只显示一次即可。    w | cut -d ' ' -f 1 | uniq -c       2、取出最后登陆到当前系统的用户的相关信息    last | head -n 1  &nbsp…

    Linux干货 2016-06-26
  • 从增删改查角度学习linux基础命令

    从增删改查角度学习linux基础命令   本文从文件的增加、删除、修改、查询四个角度介绍linux的基本命令,介绍如下:   一.增 touch命令是最常用的创建文件的命令,它的常见参数如下: -a 或–time=atime或–time=access或–time=use  只更改存取时间。 -c 或&#…

    2017-07-15
  • selinux与systemd

    selinux :service enhanced linux 安全增强的Linux  软件的安全性 选择安全系数较高的系统提高现有系统的安全性  计算机的安全等级D  最低的安全级别,提供最少的安全防护,系统访问无限制。DOS   C  访问控制的权限,能够实现可控的安全防护,个人账户管理,审计和…

    Linux干货 2017-05-22
  • CentOS系统启动流程

       开机不是只要单击电源钮,而关机只要关掉电源钮就可以了吗?话是这样没错啦,但是由于 Linux 是一套多人多任务的操作系统,你难保你在关机时没有人在在线,如果你关机的时候碰巧一大群人在在线工作, 那会让当时在在线工作的人马上断线的!那不是害死人了!一些数据可是无价之宝。    另外 Linux 在执行的时候,虽然你…

    Linux干货 2016-09-19
  • Docker 简介

    Docker在现有云计算虚拟化中是非常火的一个项目,那么他和虚拟化有什么不同呢 从上图来看,好像和我们之前说到的虚拟化并没有什么不同,但这里需要说明的是在各guest主机上,是没有操作系统的,他们共用Host主机上的内核空间,只对用户空间进行了隔离。 因此在这种环境下我们不把他称为虚拟化而称作容器。 此种方式的实现主要基于了linux内核自带的两项技术,分别…

    2017-03-19