文本处理工具:
 
  Linux上文本处理三剑客:
       文本过滤工具(模式:pattern)工具;
         1.grep:支持基本正则表达式;
         2.egrep:支持扩展正则表达式
         3.fgrep: 不支持正则表达式
     注:    同时这三个命令通过附加选项可以相互之间进行切换如下
              grep -E = egrep
              geep -F = fgrep
              egrep -G = grep
              egrp -F = fgrep
              fgrep -e = egrep
              fgrep -g = grep
 
正则表达式:Regual Expression,REGEXP
         
  由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用与表示控制或通配的功能;
           
  同时正则也分两类:
                       基本正则表达式:BRE
                       扩展正则表达式:ERE
元字符(grep):
      grep: Global search REgular expression and print out the line.
      作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到 行;
      模式 : 由正则表达式的元字符及文本字符所编写出的过滤条件;
正则表达式引擎:
     grep [options] PATTERN [FILE...]
     grep [options] [-e PATTERN | -f FILE] [FILE...]
   默认形式:    [root@localhost ~]# grep "UUID" /etc/fstab
                       UUID=c16f482c-99e1-4601-a295-895df929ef8e /boot                   xfs     defaults        0 0
下面是grep的常用选项的简要介绍            
 OPTIONS:
                       --color=auto:对匹配到的文章着色后高亮显示;
                                         -l  :  ignorecase,忽略字符的大小写;
                                         -o : 仅显示匹配到的字符串本身;
                  -v,--invert-match : 显示不能被模式匹配到的行;
                                          -E : 支持使用扩展的正则表达式元字符
                   -q,--qulet,--silent : 静默模式,即不输出任何信息;
                                        -A# : after,后#行
                                       -B# : before,前#行
                                       -C#:context
                     
 基本正则表达式元字符:
                      
  字符匹配:
                                . : 匹配任意单个字符;
                              [ ] : 匹配指定范围内的任意单个字符;
                           [^]:匹配指定范围外的任意单个字符;
                              [:digit:]、[:loewr:]、[:upper:]、[:alpha:]、[:alnum:]
针对位置锚定可以参考下面实例:
找出/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行
           [root@localhost ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
           load_env
           set default="${next_entry}"
           set next_entry=
           save_env next_entry
           ......
 
  匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;
                               *:匹配其前面的字符任意次;可以是0,也可以1或者n次;
                          例如:grep"x*y"
                                      abxy
                                      aby
                                      xxxxxy
                                      yab
                              . *  : 匹配任意长度的任意字符
                               \?  : 匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
                               \+ : 匹配前面的字符1次或多次;即前面的字符要出现至少一次
                           \{m\} : 匹配其前面的字符m次;
                          \{m,n} : 匹配其前面的字符至少m次,至多n次;
                          \{0,n\}: 至多n次
                           \{m,\} : 至少m次  
    位置锚定:
                   ^:行首锚定:用于模式的最左侧;
                   $:行尾锚定:用于模式的最右侧;
                ^PATTERN$:用于PATTERN来匹配整行;
                               ^$ : 空白行;
                ^[[:space]]*$ : 空行或包含空白字符的行;
                             单词:非特殊字符组成的连续字符(字符串)都称为单词;
                         \<或\b : 词首锚定,用于单词模式的左侧;
                         \>或\b : 词尾锚定,用于单词模式的右侧
  针对位置锚定可以参考下面实例:
   例:找出/etc/passwd文件中不以/bin/bash结尾的行
         [root@localhost ~]# grep -v "/bin/bash$" /etc/passwd |tail
         chrony:x:993:990::/var/lib/chrony:/sbin/nologin  
         ntp:x:38:38::/etc/ntp:/sbin/nologin
         sssd:x:992:989:User for sssd:/:/sbin/nologin
         rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
         nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
         pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
         gdm:x:42:42::/var/lib/gdm:/sbin/nologin
         postfix:x:89:89::/var/spool/postfix:/sbin/nologin
         sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
         tcpdump:x:72:72::/:/sbin/nologin
 
 
  分组及引用
                               \(\) : 将一个或多个字符捆绑在一起,当作一个整体进处理;
                                     例:\(xy\)*ab
                        注意:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
                                \1:模式从左侧起,第一个左括号以及与之匹配的有括号之间的模式所匹配到的字符;
                                \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
                                \3
                                  .......
                             如下面例子:
                               [root@localhost ~]# cat love.txt
                                  He loves his lover
                                  He likes his lover
                                  she likes her liker
                                  she loves her liker
  
                               
                该例的含义是,行段中左侧出现的以L开头e结尾的单词,后面也要匹配与前面一样的,所以可以把前面(l..e)后面加\1并以\1结尾,将(l..e)的值赋值给到\1。
                                                

文本处理工具(grep)的更多相关文章

  1. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  2. 【Linux】 字符串和文本处理工具 grep & sed & awk

    Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...

  3. Linux 文本处理工具grep,sed,awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  4. shell之三大文本处理工具grep、sed及awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  5. 三大文本处理工具grep、sed及awk

    一.   用grep在文件中搜索文本 grep能够接受正则表达式,生成各种格式的输出.除此之外,它还有大量有趣的选项. 1.  搜索包含特定模式的文本行: 2.  从stdin中读取: 3.  单个g ...

  6. Linux--shell脚本之文本处理工具

    文本处理工具--grep.sed.awk Bash Shell提供了功能强大的文件处理工具:sed(流编辑器stream editor)和awk,都可使用正则表达式进行模式匹配. 而grep又有助于理 ...

  7. Linux的文本处理工具浅谈-awk sed grep

    Linux的文本处理工具浅谈 awk   老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ...

  8. [linux] grep 文本搜索工具

    grep [option] pattern file Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global Regular ...

  9. grep文本处理工具

    grep是一款文本过滤工具,基于正则表达式进行模式匹配sed:stream editor 流编辑器awk:linux上实现为gawk,文本报告生成器(格式化文本)文本搜索工具,根据用户指定的模式,对目 ...

随机推荐

  1. 201521123066 《Java程序设计》第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.多态性: (1)概念:相同的方法名,不同的实现方法 (2)instanceof运算符:判 ...

  2. 201521123055 《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  3. 201521123037 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. I/O流.本质上是一个数据序列:最基本的可处理数据单位为byte. 1.1 分类:输入流(读数据),输出流(写 ...

  4. 201521123072《java程序设计》第十四周学习总结

    201521123072<java程序设计>第十四周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库 ...

  5. 201521123018 《Java程序设计》第13周学习总结

    1. 本章学习总结 2. 书面作业 一.1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 返回时间 ...

  6. PHPStorm调试PHP代码~实际操作+mark~~

    因为wamp自己已经下载了xdebug,只要配置开启就行了. 1. 配置php.ini(有就打开注释,没有就加上) XDEBUG Extension[xdebug]zend_extension =&q ...

  7. 系统学习java高并发系列二

    转载请注明原创出处,谢谢! 什么是线程? 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程 ...

  8. Split分割字符串

    第一种方法:打开vs.net新建一个控制台项目.然后在Main()方法下输入下面的程序. string s="abcdeabcdeabcde"; string[] sArray=s ...

  9. JS 数据处理技巧及小算法汇总( 一)

    前言: 金秋九月的最后一天,突然发现这个月博客啥也没更新,不写点什么总觉得这个月没啥长进,逆水行舟,不进则退,前进的路上贵在坚持,说好的每个月至少一到两篇,不能半途而废!好多知识写下来也能加深一下自身 ...

  10. .NET第四章总结

    .NET第四章简单总结 1.简单的获取文件路径:                    2.回车跳转控件焦点    3.*************无标题窗体拖动!!************* 1): ...