码迷,mamicode.com
首页 > 系统相关 > 详细

Linux中的文本处理工具(二)

时间:2016-08-08 01:07:37      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:search   三剑客   表达式   stream   全球搜索   

一、Linux上文本处理三剑客

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

    grep, egrep, fgrep(不支持正则表达式搜索)

    sed:stream editor,文本编辑工具;

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

 

  1.grep

    grep: Global search REgularexpression and Print out the line.(全球搜索正则表达式,并打印成一行)

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

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

技术分享

     grep [OPTIONS] PATTERN [FILE...]

      grep root /etc/passwd

      grep "$USER" /etc/passwd

      grep ‘$USER‘ /etc/passwd

      grep `whoami` /etc/passwd

技术分享

  2.grep命令表达式:

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

      -v: 显示不能够被pattern匹配到的行;

      -i: 忽略字符大小写

技术分享

      -n:显示匹配的行号

技术分享

     -c: 统计匹配的行数

技术分享

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

技术分享

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

技术分享

      -A #:after, 后#行

技术分享

      -B #: before, 前#行

      -C #:context, 前后各#行

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

         如:grep –e ‘cat ’ -e ‘dog’ file

技术分享

      -w:整行匹配整个单词

技术分享

      -E:使用ERE

 

二、正则表达式

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

   程序支持:grep, vim, less,nginx

   分两类:

     基本正则表达式:BRE

     扩展正则表达式:ERE

       grep -E, egrep

   正则表达式引擎:

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

     PCRE(Perl Compatible Regular Expressions)

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

   man 7 regex


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

    字符匹配:

      . :匹配任意单个字符;

技术分享

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

技术分享

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

技术分享

       [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、 

       [:punct:]、[:space:]

    匹配次数

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

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

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

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

         \?  :匹配其前面的字符01

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

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

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

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

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

    位置锚定

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

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

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

技术分享

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

         ^$: 空行,不包含有空格的行

技术分享

         ^[[:space:]]*$ :空白行,包含有空格的行

技术分享

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

技术分享

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

技术分享

         \<PATTERN\>:匹配整个单词

技术分享

    分组

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

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

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

       实例:\(string1\+\(string2\)*\)

        \1: string1\+\(string2\)*

        \2: string2

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

技术分享

技术分享


   2.egrep和扩展的正则表达式

     egrep= grep -E

     egrep[OPTIONS] PATTERN [FILE...]

    扩展正则表达式的元字符

      字符匹配:

         . 代表任意单个字符

         [] 指定范围的字符

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

      次数匹配:

         *:匹配前面字符任意次

         ?: 0或1次

         +:1次或多次

        {m}:匹配m次

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

      位置锚定:

         ^ :行首

         $ :行尾

        \<, \b:语首

        \>, \b:语尾

      分组:

         ()

       后向引用:\1, \2, ...

      或者:

          a|b

          C|cat: Ccat

         (C|c)at:Catcat



 练习(一):

   

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

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

 6、找出"netstat -tan"命令的结果中以‘LISTEN‘后跟任意空白字符结尾的行

技术分享

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

技术分享

技术分享

技术分享




 练习(二)

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

技术分享

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

技术分享

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

技术分享

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

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

技术分享

  6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

  7、显示ifconfig命令结果中所有IPv4地址

技术分享

Linux中的文本处理工具(二)

标签:search   三剑客   表达式   stream   全球搜索   

原文地址:http://1992tao.blog.51cto.com/11606804/1835430

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!