文本处理工具 grep

文件查看:

      文件查看命令:cat,tac,rev

              cat [OPTION]… [FILE]…

               -E: 显示行结束符$

               -n: 对显示出的每一行进行编号

               -A :显示所有控制符,相当于-vET

               -b:非空行编号,就是说空行的不给编号

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

         

blob.png

分页查看文件内容:

    more: 分页查看文件

         more [OPTIONS…] FILE…

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

        只能向下翻页

    less :一页一页地查看文件或STDIN 输出,比more功能更全面

        查看时有用的命令包括:

           /文本搜索 文本

           n/N跳到下一个 or 上一个匹配

          less 命令是man命令使用的分页器

显示文本前或后行内容:

         head [OPTION]… [FILE]…  默认显示前十行

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

               -n #: 指定获取前#行

                -#:指定行数

     

blob.png

        tail [OPTION]… [FILE]…    默认显示后十行

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

              -n #: 指定获取后#行

    

blob.png

              -#:指定行数

              -f: 跟踪显示文件新追加的内容

     命令:tail -n3 -f /var/log/messages  自动监控更新信息

     

blob.png

按列抽取文本cut:

     cut [OPTION]… [FILE]…

          -d DELIMITER: 指明分隔符,默认tab

          -f FILEDS:

          #: 第# 个字段

          #,#[,#] :离散的多个字段,例如1,3,6

          #-# :连续的多个字段, 例如1-6

          混合使用:1-3,7

           

blob.png

         -c 按字符切割

blob.png

         –output-delimiter=STRING 指定输出分隔符

blob.png

      paste 合并两个文件同行号的列到一行

           paste [OPTION]… [FILE]…

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


blob.png

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

blob.png

                     同一个文件内容在同一行显示

收集文本统计数据wc:

       计数单词总数、行总数、字节总数和字符总数


blob.png

                3(行总数),3(单词总数),36(字节数)

        使用 -l 来只计数行数

        使用 -w 来只计数单词总数

        使用 -c 来只计数字节总数

        使用 -m 来只计数字符总数

blob.png

文本排序sort:

 把整理过的文本显示在STDOUT ,不改变原始文件    $ sort [options] file(s)

   默认按照字母顺序排序

      常用选项:

          -r 执行反方向(由上至下)整理

          -n 执行按数字大小整理

          -t c 选项使用c 做为字段界定符

          -k X 选项按照使用c 字符分隔的X

按照数字反向顺序对第3列排序整理:

    

blob.png

          -f 选项忽略(fold )字符串中的字符大小写

          -u 选项(独特,unique )删除输出中的重复行

                  例:

blob.png

             图为忽略you的大小写,删除重复的行,按照默认字母顺序排序


   uniq 命令:从输入中删除重复的前后相接的行

      uniq [OPTION]… [FILE]…

      -c: 显示每行重复出现的次数;

      -d: 仅显示重复过的行;

      -u: 仅显示不曾重复的行;连续且完全相同方为重复

     常和sort 命令一起配合使用:sort userlist.txt | uniq -c

比较文件:

           命令:diff  ____   ____

blob.png

diff命令的输出被保存在一种叫做“补丁”的文件里

       使用-u选项输出diff格式文件,适合用于补丁文件

       例:  diff -u f3 f33 > diff.log    然后删除f33文件  然后patch命令恢               复  patch -b f3 diff.log   

而patch命令是用来恢复diff格式文件的

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

Linux文本处理三剑客: 

    grep:文本过滤(模式:pattern)工具

    set: stream editor, 文本编辑工具

    awk: Linux上实现gawk,文本报告生成器

grep工具:

    grep: Global search REgular expression and Print out   the line.

                      全局搜索正则表达式和打印行

        作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;

         模式:由正则表达式字符及文本字符所编写的过滤条件

         命令语法:     grep [OPTIONS] PATTERN [FILE…]

          

blob.png

       grep "$USER" /etc/passwd    会把“$USER”当成变量

          

blob.png

         grep ‘$USER’ /etc/passwd   匹配不出结果

         grep `whoami` /etc/passw  

      

blob.png

 grep命令选项:


–color=auto: 对匹配到的文本着色显示;

-v: 显示不能够被pattern 匹配到的行;除了参数之外的其他行

blob.png

-i: 忽略字符大小写

-n: : 显示匹配的行号

-c: 统计匹配的行数

blob.png

-o: 仅显示匹配到的字符串;

blob.png

-q: 静默模式,不输出任何信息

blob.png

用于只关心能不能成功,而不关心内容   echo $?可查看上一条命令是否执行成功,若执行成功,是0 ;执行失败是非0

-A # :after, 后#行

blob.png

              显示匹配结果之后的#行

-B #: before, 前#行   道理和-A选项相同

-C # :context, 前后各#行   参考-A ,-B

-e :实现多个选项间的逻辑or关系    grep –e ‘cat ’ -e ‘dog’ file

     例:

blob.png

         显示出有root或/home的行

 

blob.png

      匹配显示出既有/home  又有xixi的行

-w :整行匹配整个单词

blob.png

-E :使用ERE    支持扩展的正则表达式

正则表达式:

        REGEXP:由一类特殊字符及文本文字符所编写的模式,其中有些字符(元字符)不表示字符字面意思,而表示控制或通配的功能

         程序支持:grep,vim,nginx

         分两类:  基本正则表达式:BRE    ;   扩展正则表达式:ERE

                    grep -E =egrep

        正则表达式引擎:

                 采用不同算法,检查处理正则表达式的软件模块 

                  PCRE(Perl Compatible Regular Expressions)

         元字符分类:字符匹配、匹配次数、位置锚定、分组

基本正则表达式元字符:

   字符匹配:

        . :匹配任意单个字符

blob.png

       [] :匹配指定范围内的任意单个字符

       

blob.png

     由于r和t之间只写了一个[a-z],所以匹配到的是一个字符

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

blob.png

       [:digit:] 、[:lower:] 、[:upper:] 、[:alpha:] 、[:alnum:]、                 [:punct:] 、[:space:](包括空格和tab键)

 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

* :匹配前面的字符任意次,包括0次

       贪婪模式:尽可能长的匹配

        

blob.png

       ro*t表示r和t之间有任意个o 或者没有

.* :任意长度的任意字符

blob.png

\? :匹配其前面的字符0或1次

blob.png

\+ :匹配其前面的字符至少1次

blob.png

\{m\} :匹配前面的字符m次   

          

blob.png

              匹配指定的m次

\{m,n\} :匹配前面的字符至少m 次,至多n次

            

blob.png

           匹配r,t之间,o至少0次,至多3次的字符

\{,n\} :匹配前面的字符至多n次

blob.png

            匹配r,t之间,o最多6次的字符

\{m,\} :匹配前面的字符至少m次

blob.png

             匹配r,t之间,o至少3次的字符 

位置锚定:定位出现的位置

^ :行首锚定,用于模式的最左侧

      

blob.png

      显示root在行首的行 

$ :行尾锚定,用于模式的最右侧

          

blob.png

       显示bash在行尾的行

附加一个:


blob.png

     显示root在行首bash结尾的行,   .*表示root和bash之间的任意长度字符

^PATTERN$: 用于模式匹配整行

     ^$: 空行

         

blob.png

              只显示空行  

     ^[[:space:]]*$ :空白行   包括空行,或者空行中带空格行 

     \<或\b :词首锚定,用于单词模式的左侧

     \>或\b :词尾锚定;用于单词模式的右侧 

如果只锚定词首或词尾,会出现下面这种情况:

          

blob.png

   \<PATTERN\>匹配整个单词

blob.png

分组:  \(\):将一个或多个字符捆绑在一起,当做一个整体进行处理:

   如:\(root\)\+,表示root这个单词至少出现一次  中间可带有其他任意字符

blob.png

         分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

         \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;

         后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

来个实例:


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

       

blob.png

blob.png


egrep 及扩展的正则表达式:

         egrep = grep -E       egrep [OPTIONS] PATTERN [FILE…]

        字符匹配:

                     . 任意单个字符

                     [] 指定范围的字符

                     [^] 不在指定范围的字符

扩展正则表达式

    次数匹配:

                 *:匹配前面字符任意次

                 ?: 0或1次

                 +:1次或多次

                {m}:匹配m次

                {m,n}:至少m,至多n次

blob.png

    位置锚定:

                 ^ : 行首

                 $ : 行尾

                 \<, \b : 语首

                 \>, \b : 语尾

    分组:

                 ()      后向引用:\1, \2, …

     或者:

                 a|b

                 C|cat: C 或cat

                (C|c)at:Cat 或cat

用法参照练习题http://www.178linux.com/?p=30590&preview=true

原创文章,作者:旧城以西,如若转载,请注明出处:http://www.178linux.com/29482

(0)
旧城以西旧城以西
上一篇 2016-08-07 14:17
下一篇 2016-08-07 22:05

相关推荐

  • 何为正则表达式?

    何为正则表达式?   UNIX/Linux上有许多文本处理工具,其中最主要最重要要属grep、sed、和awk三种了,被称为文本处理三剑客。但是要完全认识他们的各种功能,则必须现在正则表达式及其元字符的使用上打好基础。 什么是正则表达式呢?正则表达式(regular expression,RE)是一种字符模式,用于在查找过程中匹配指定的字符。正则表…

    Linux干货 2016-08-16
  • 阿里云修改hostname主机名的一点小技巧

    CentOS 7以后修改主机名一般使用: hostnamectl set-hostname newhostname 如果仍然无效,使用vim打开/etc/cloud/cloud.cfg,将 preserve_hostname=fale 改为 preserve_hostname=true 即可。 以上在阿里云ECS上亲测有效,使用了网上查阅…

    Linux干货 2017-01-09
  • 构建企业日志实时查看系统

    前言:          由于项目刚刚上线,出现了许多bug,开发人员需要经常跑过来查看日记,严重影响了我们运维人员的工作效率,时而久之,感觉那个烦啊。。各位仁兄有 没有体 会到呢!!! 之前找了一些处理日记的工具都不具有实时性,所以都未采纳,刚刚发现了log.io这个工具推荐个…

    Linux干货 2015-02-13
  • N22-第六周作业

    请详细总结vim编辑器的使用并完成以下练习题      vim是模式化的文本编辑器。在不同模式下,每一次按键的效果都不一样。vim有三种工作模式,分别是编辑模式,插入模式和末行模式。编辑模式是打开vim后的默认模式,用于查看文本或进行复制,粘贴,删除等编辑命令。插入模式是为了向文本中输入信息。末行模式是vim自带的命令行接口,能…

    Linux干货 2016-09-26
  • 第六周课程作业

    1、复制/etc/rc.d/init.d/functions文件至/tmp目录,将/tmp/functions文件中 的以至少一个空白字符开头的行的行首加# ~]# cp /etc/rc.d/init.d/functions /tmp~]# vim /tmp/functions %s@^[[:space:]]\+@#@g 2、复制/boot/gru…

    Linux干货 2016-12-12
  • 用户和组相关的配置文件总结

    包括:/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,/etc/login.defs,/etc/dufaults/useradd,/etc/skel/.*,/etc/gdm/custom.conf,   /etc/passwd 用户信息库文件;用于保存用户账号信息; 各字段含义依次为: 用户名:用户密…

    Linux干货 2016-10-25