linux上的文本三剑客之grep和文本查看工具

linux上文本处理三剑客

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

    grep:基本正则表达式,-E:支持扩展正则表达式,-F:不支持正则表达式

    egrep:扩展正则表达式,-G:支持基本正则表达式 ,-F:不支持正则表达式

    fgrep:不支持正则表达式,-E.-G

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

    awk:linux实现为gawk,文本报告生成器(格式化文本);

  正则表达式:(regual expression,REGEXP)由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,

  而是用于表示控制或通配的功能;主要分两类:

    基本正则表达式:BRE

    扩展正则表达式:ERE

     元字符:什么是元字符呢,这个像天书一样的东西就是元字符–>\(hello[[:space:]]\+\)\+

  grep:

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

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

    grep

        grep [OPTIONS] PATTERN [FILE…]

          grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

           –color=auto:自动对匹配到的文本做着色,高亮显示

           -i:ignorecase:忽略字符大小写

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

           -v:显示不能被模式匹配到的行

           -E:支持使用扩展的则表达式元子符

           -q:–quiet, –silent:静默模式,既不输出任何信息;

           -A:后#行

           -B:前#行

           -C:前后各#行

    基本正则表达式元字符

     字符匹配:

        .:匹配任意单个字符

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

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

        [:digit:]数字

       [:lower:]小写字母

       [:upper:]大写字母

        [:alpha:]所有大小写字母

        [:alnum:]所有字母和数字

        [:punct:]所有标点符号

        [:space:]所有空白字符

      匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式

        *:匹配其前面的字符任意次;0;1;多次

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

        \?:匹配其前面的字符0次或1次,即其前面的字符可有可无

        \+:匹配其前面的字符1次或多次,即其前面的字符要出现至少1次

        \{m\}:匹配其前面的字符m(指精确数字)次;

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

        \{0,n\}至多n次

        \{m,\}至少m次

     位置锚定:

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

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

        ^PATTERN$:用PATTERN来匹配整行

        ^$:空白行

        ^[[:space:]*]$:空行或包含空白字符的行

     单词锚定(单词:非特殊字符组成的连续字符(字符串)都称为单词)      

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

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

        \<PATTERN\>:匹配完整单词;

    分组及引用

        \(\):将一个或多个字符捆绑在一起,当成一个整体进行处理,如: \(xy\)*ab      

      分组:括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

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

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

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

        ]#:grep "\(l..e\).*\1" lovers.txt

      后向引用:引用前面的分组括号中的模式所匹配到的字符

    egrep:支持扩展正则表达式实现类似与grep文本过滤功能;grep -E

       grep [OPTIONS] PATTERN [FILE…]

          –color=auto:自动对匹配到的文本做着色,高亮显示

          -i:ignorecase:忽略字符大小写

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

          -v:显示不能被模式匹配到的行

          -E:支持使用扩展的则表达式元子符

          -q:–quiet, –silent:静默模式,既不输出任何信息;

           -A:后#行

           -B:前#行

           -C:前后各#行

           -G: 表示支持基本正则表达式

      扩展正则表达式的元字符

        字符匹配

          .:任意单个字符

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

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

         [:digit:]数字

        [:lower:]小写字母

        [:upper:]大写字母

        [:alpha:]所有大小写字母

        [:alnum:]所有字母和数字

        [:punct:]所有标点符号

        [:space:]所有空白字符

        次数匹配

          *:任意次,0,1或多次

           ?: 0次或1次;表示其前的字符可有可无

           +:其前字符至少1次;表示一次或多次

           {m}:其前的字符m次

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

           {0,n}:至多n次

           {m,}:至少m次

        位置锚定:

           ^:行首锚定

           $:行尾锚定

           \<或者\b:词首锚定

           \>或者\b:词尾锚定

        分组及引用

          ():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎内部的变量中;

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

          或:

           a|b:a或者b;整个左侧或者右侧

           C|cat:C或者cat

           (c|C)at:cat或者cat

文本查看工具

    cat:more: less:head:tail:

    cat:

         -n:加行号

         -b:空行不加行号

         -ns:把压缩重复的空行仅仅显示一行

         -v:显示windows的^M号

         -t:显示tab符

    tac:和cat相反显示

    rev:反向显示每一个行的每个字符

    more:分页显示,less更便捷

    less:可以一页页的翻,上下都可以,也可以搜索关键字

         -/关键字:搜索关键字

         n/N:向下和向上搜索

         !:支持shell命令,可以在输入!后输入shell命令

    head:显示头10行(默认)

         -n#:-n3(显示前3行

    tail:显示后10行(默认)

        -n#:-n3(显示后3行)用来看日志用到比较多

        -c#(-c10)只显示最后的10个字节

         -f:不会在显示信息之后自动退出, 跟踪显示文件新追加的内容,常用日志监控

            tail -f /var/log/messages

              tail -n0 -f /var/log/messages &

            此命令只显示新的日志信息,而且还可以继续操作其他命令

              必须使用fg 1 ctrl+c 才能终止后台

文本处理工具

   wc,cut,sort,uniq,diff,patch

    wc:word count:单词统计

      -l:仅显示行数

      -w:仅显示单词数

      -c:仅显示字节数

       -m:仅仅显示字符数

    示例

    [root@ali ~]# netstat -nt(此命令显示当前系统的网络链接状态,可以结合wc命令得出行数,单词数,字节数)

    Active Internet connections (w/o servers)

    Proto Recv-Q Send-Q Local Address               Foreign Address             State

    tcp        0      0 10.1.253.109:22             10.1.250.14:51155           ESTABLISHED

    [root@ali ~]# netstat -nt |wc

      3      19     219   (左侧3表示行数,19表示单词数,219表示字节数)

    cut:以列切割

      -d CHAR:以指定的字符为分隔符

      -f FIELDS:挑选出的字段

      #:指定的单个字段

      #-#:连续的多个字段

      #,#:离散的多个字段

    示例(1)

    [root@ali ~]# cat /etc/passwd | cut -d: -f1,3,7

    root:0:/bin/bash

    bin:1:/sbin/nologin

    命令解析:cat /etc/passwd 然后通过管道给cut -d: -f1,3,7:以冒号为分割符,列出第1,3,7列    

    示例(2)

    [root@ali ~]# ifconfig |cut -d: -f2 |cut -d' ' -f1 |head -2 |tail -1

    10.1.253.109

    命令解析:使用cut和head,tail结合取出ifconfig中的ip地址

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

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

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

      paste f1 f2

      paste -s f1 f2

    sort:排序

      -n:基于数值大小排序,而非字符进行排序

      -t CHAR:指定分隔符

      -k #:用于排序比较的字段

      -r:逆序排序

      -f:忽略字符大小写

      -u:重复的行只保留一份;

      uniq:报告和移除重复的行

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

      -u: 仅显示未曾重复过的行

      -d: 仅显示重复过的行

    示例

    cat /etc/init.d/functions |tr -cs '[[:alpha:]]' '\n' |uniq -cd

    命令解析:cat查看文件管道给tr -cs把所有字母以外的全部替换成换行,然后给uniq -cd

    仅仅显示重复过的行和重复的次数,找出/etc/init.d/functions每个单词重复的次数。

    diff:找出两个文件的不同点,并且生成补丁

    diff [选项] 源文件 目标文件

    生成补丁

    diff/path/to/oldfile /path/to/newfile > /path/to/patch_file

      -u:使用unfied机制,即显示要修改的行的上下文,默认认为3行,可以使用-c定义为多少行

    示例:显示出了不同行的上下各3行

    [root@ali ~]# diff -u f1 f1.new

    — f1 2016-08-04 07:01:29.302813685 +0800

    +++ f1.new 2016-08-04 07:02:10.501812744 +0800

    @@ -1,6 +1,6 @@

    Filesystem     1K-blocks    Used Available Use% Mounted on

    /dev/sda2       82438832 3739076  74505452   5% /

    -tmpfs             502068     224    501844   1% /dev/shm

    +tmpfs i am fi.new            502068     224    501844   1% /dev/shm

    /dev/sda1         194241   34079    149922  19% /boot

    /dev/sda3       20027260   45504  18957756   1% /testdir

    /dev/sr0         3824484 3824484         0 100% /media/CentOS_6.8_Final

    patch:向文件打补丁

    patch[options] -i /path/to/patch_file  /path/to/oldfile

    也可以是使用输入重定向方法

    patch/path/to/oldfile < /path/to/path_file


原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/29821

(0)
M20-1马星M20-1马星
上一篇 2016-08-07
下一篇 2016-08-07

相关推荐

  • linux磁盘管理补充之挂载选项及常用工具

    一、文件挂载的配置文件         配置文件:/etc/fstab 要挂载的设备的UUID或卷标或/dev/sd[a-z]    挂载点        &n…

    Linux干货 2016-08-30
  • Linux文件根目录

    / 表示为根目录/├── bin  存放用户使用的基本命令(可执行程序,二进制文件)  不能单独分区├── boot   跟内核有关的文件 grub  内核和BootLoader ├── cgroup   用来资源限制资源隔离 docker 容器化├── dev(device )设备文件&…

    2017-03-27
  • 脚本及变量解析

    bash脚本编程 脚本文件格式: 第一行顶格:#!bin/bash  (shebang) 注释信息:以#开头 代码注释:好的程序员必备 适量的添加缩进或添加空白行以示分割 语言:编程语言格式:库,算法和数据结构 编程思想:      能够把学到的编程语言的语法格式随时转换为解决问题的思路     &…

    Linux干货 2016-08-12
  • N21-北京-兔锅-马哥教育网络班21期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。    who | cut -d' ' -f1 | uniq   2、取出最后登录到当前系统的用户的相关信息。    who | ta…

    系统运维 2016-07-07
  • Nginx及其相关配置详解(一)

    Nginx: Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资…

    2017-06-22
  • KeepAlived的配置及使用!

    此篇博客主要是和大家共同了解一下keepalived的功能及基础配置,以便于牢固掌握,此篇博客共分为三个部分;                ⊙ 简述keepalived的主要功能及安装环境;           &nb…

    2017-05-13