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