Linux—文本处理(查看,统计,排序,抽取,合并,grep,基本正则表达式)

Linux的文本管理有着众多的文本命令工具,这些工具基本可以满足不同的文本处理要求,很是灵活,掌握文本管理命令对系统的维护是必备基础技能。


1.文本查看命令:

    (1)cat

       语法:

       cat [OPTION]… [FILE]…

       常用选项:

       -n:显示查看文件内容的行号;

       -A:显示文件内容中的所有特殊控制符符号,比如Tab键的字符,和换行符等;

       -E:显示文件内容中的结束控制符$;

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

       -b:空行不显示行号;


    (2)more:有些大文件内容很多,cat命令一下输出完到底部,前面的内容没办法在命令行界面里灵活查看,more支持分页查看文件;

       语法:

       more FILE…

       支持快捷键操作:Ctrl+b,Enter,空格键;

       支持文本搜素:使用“/”后跟string关键字

       搜索查找到支持地位跳转:n:向下 N:向上;

     注意:翻到文件尾部就退出


    (3)less:命令比more命令更灵活,使用分页器,同时支持PATTERN;

       语法:

       less FILE…

       前面more的功能都支持。

    

    (4)head:定位查看文本头部内容;

       语法:

       head [options]…FILE…

       常用选项:

       -n#:指定显示前面多少行;

       -c#:显示文件头部内容的字节数;

    (5)tail:定位查看文件尾部内容;

       语法:

       tail [options]…FILE…

       常用选项:

       -c#:指定显示文件尾部字节数;

       -n#:指定显示尾部多少行

       -f:跟着显示文件尾部追加内容,不退出继续显示,用作日志监控;


2.在Linux系统中,我们需要经常对文件进行操作,除了增删改查以外,有时需要在不改变原文件属性的前提下对文件进查看,统计,排序,比较等简单操作。下面分别介绍一下这些需求。

 

    (1)文本统计工具wc命令

       wc命令

       语法 :

      wc [options]…[FILE]…

      常用选项:

      不跟选项默认显示内容分别为:文件行数,单词数,字节数;

      -l:只显示文件行数;

      -c:只显示文件中的字节数bytes;

      -w:只显示文件中的单词数;

      -m:只显示文件中的字符数chars;


    (2)文本裁剪工具cut命令和文本合并工具paste命令

       cut 命令有些文件的格式有标准分割符,组成的行和列,可以使用cut命令取出相应的行。

       语法:

       cut [options]…[FILE]…

      常用选项:

      -d:指定以什么符分割每行列;

      -f:指定第几个列,可以连续表示1-5,逗号分割;

      -c#:使用字符个数做分割列;

     

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

      语法

      paste [OPTION]… [FILE1] [FILE2]

      常用选项:

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

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

    

    (3)文本字符排序工具sort和uniq命令

        sort

        语法:

        sort [options]…[FILE]

        常用选项:

        默认排序是根据字符排序

        -n:以数值大小排序

        -r:反向逆序排序

        -t:指定以什么符作为分割列;

        -k:指定第几列进行排序;

        -f:忽略大小写;

   

        uniq

        语法:

       uniq [options]…[FILE]…

       常用选项:

       默认显示连续重复的行只显示一行;

       -c:显示重复行次数;

       -u:不显示重复的行;

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

 

  (4)文本比较和补丁恢复工具diff和patch命令

 

        diff:是逐行比较内容

        语法:

        diff [options] [FILE1]  [FILE2]

        diff [options] [FILE1]  [FILE2] >file_patch

        常用选项:

         -u:改变比较内容输出的风格;

         重定向输出的内容为补丁文件,可以利用补丁恢复文件,

 

        patch

        语法:

        patch [options] [file_patch] [FILE]

        常用选项:

         -i:利用补丁恢复原文件;

         R:返回操作;

3.前面介绍了Linux的文本查看以及统计排序抽取比较等工具,但是对文件内容的特定的行列中的字符查找操作,前面的命令很难实现。但是Linux系统中还有许多其他工具是基于模式PATTERN处理文本,其模式要用到正则表达式。

   正则表达:正则表达式是由正则表达式的元字符和文本字符组成的过滤条件;

    正则表达式的元字符:是由一类特殊的字符组成,这些特殊字符不表示本身的含义,而是做控制、次数 或通配的功能。正则表达式根据元字符意义的不同可以分为有两种类型:如下:

      (1)基本正则表达:基本正则表达式的元字符意义如下:

            .   :表示任意单个字符;

         [ ]  :表示指定范围内的单个字符;

         [^]  :表示指定范围外的单个字符;

匹配次数:

         *   :其前字符任意次数,可以是0次1次或一次以上。

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

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

           \+  :匹配其前字符最少1次多了不限制。

         \{n\}  :匹配其前字符指定n次

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

         \{0,n\} :匹配其前字符至多n次,最少不限制,可以0次 ;

          \{m,\} :匹配其前字符至少m次,至多不限制;

位置锚定:

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

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

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

        ^$     :表示空白行,不包括空白字符键和Tab键;

    ^[[:space:]]  :包括Tab键字符空白字符的空白行

 

单词锚定:这里的单词表示:非特殊字符组成的的连续字符(字符串);

       \<   :锚定词首;可以用\b用于左侧;

       \>   :锚定词尾;可以用\b 用于右侧;

  \< PATTERN\>   :锚定整个单词;

 

分组及引用:前面的匹配模式只能匹配其前单个字符,要想把整个字符串当成一个整体被匹配,需要分组才能实现,同时要想在后面再次匹配其前模式匹配到的内容,保证前后匹配内容相同,只能分组引用,根据正则表达式引擎会把其前匹配到的内容保存为变量,引用变量,这样引用的不在是模式,而是变量保存的内容。达到前后匹配内容一致。

        \(\)::分组格式

        引用:

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

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

         …

         注意括号不能不能交叉,跟数学表达式括号运算顺序一样。

 

    (2)扩展正则表达式ERE: 扩展正则表达式的元字符,前面提到的元字符在这里稍微有点改变。

字符匹配:

          .  :任意单个字符

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

        [^]   :匹配不在指定范围内的单个字符

 

次数匹配:

       *    :匹配其前字符任意次

     ?      : 0或1次

     +      :1次或多次

     {m}     :匹配m次

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

位置锚定和单词锚定跟其前面的基本正则表达式一样意义。

分组:

    ()::分组格式

        引用:

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

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

         …

或者:

    |

   这里的或者匹配的是两边独立完整的字符串

4.grep文本处理工具:

     grep是基于模式过滤文本行,也就支持正在表达式;

            grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,      并把匹配的行打印出来。

     grep家族有三个后两个分别是egrep和fgrep;

     egrep是基于扩展的正则表达式

     fgrep是不使用正则表达式,所以匹配速度非常快,对简单的过滤模式可以使用fgrep;

     grep

     语法:

     grep [OPTIONS] PATTERN [FILE…]

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

     常见选项:

     –color:对匹配到的字符和字符串高亮显示

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

     -v:对没有匹配到的行进行显示;

     -i:忽略大小写;

     -n:对匹配到的行显示行号;

     -q:静默模式,作用是有时候匹配不到内容grep命令也不会有任何提示,这时候只想知道匹配结果有还是没有,需要"echo $?"对命令的执行结果进行判断。

  -e :可以指定多个模式进行匹配;或者的意义;

  -w :完整单词匹配;

  -A# :对匹配到的行定位向后显示#行;

  -B# :对匹配到的行定位向前显示#行;

  -C# :对匹配到的行定位向前后分显示#行

  -f file:引用文件内的模式当做进行匹配的条件;

  -E:对于egrep,也就支持扩展的正则表达式;


  egrep:扩展的grep,默认支持的应用的是扩展正则表达式; 

  语法:

     egrep [OPTIONS] PATTERN [FILE…]

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

     常用选项:

     其前的grep选项基本支持,

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


原创文章,作者:xiashixiang,如若转载,请注明出处:http://www.178linux.com/30211

(3)
xiashixiangxiashixiang
上一篇 2016-08-07 22:05
下一篇 2016-08-07 22:06

相关推荐

  • 字段分隔符和迭代器

        内部字段分隔符(Internal Field Separator)是shell脚本编程中的一个重要概念。在处理文本数据时,有很大的作用。内部字段分隔符是用于特定用途的定界符,IFS是存储定界符的环境变量,它是当前shell环境中使用的默认定界符字符串。     例一:da…

    Linux干货 2016-08-15
  • bash功能特性四 文件名通配符

    文件名通配(globbing)     通配符在bash中是一个非常有用的功能,它可以使我们更加方便的查找符合特定条件的文件。     文件通配符的包括以下几种:          *:任意长度的任意…

    Linux干货 2015-04-21
  • httpd——事务

    http协议: http/0.9 ,http/1.0 ,http/1.1 ,http/2.0 http协议:stateless          服务器无法持续追踪访问者来源          &nb…

    Linux干货 2016-10-12
  • 如何修复Ubuntu 12.04上时间不正确的问题

    大家好: 今天跟大家分享下如何修复ubuntu 12.04上时间不正常的问题。 1–首先打date查看系统的时间是否正常 martell@cnux10:~/sistes/sha-mmb-o2o2o$ date  Thu Dec  1 09:15:47 UTC 2016 martell@cnux10:~/sistes/sha-m…

    Linux干货 2016-12-04
  • Linux获取帮助的途径、history命令及文件系统结构

        在学习Linux的过程中,往往会遇到一些难以理解的问,这时我们就需要寻求帮助,下面是获取帮助的几个途径。 一、man(manual)手册(命令) 1、man手册介绍 (1)man手册是系统自带的联机帮助手册,善于利用man命令,可以帮我们解决遇到的大部分问题。 (2)man手册分为九个章节,每个章节是独立的。 章节1:表…

    Linux干货 2016-07-29
  • N28-第二周博客作业

    常用通配符
    *:表示任意长度的任意字符;

    ?:表示任意的单个字符;

    []:表示在指定范围内的单个字符:[a-z];

    [^]:脱字符,是取反的意思,即在指定范围以外的任意字符,如 [^0-9]表示除数字以外的一切字符。

    [:digit:] 表示所有的数字,相当于0-9

    [:lower:] 表示所有的小写字母

    [:upper:] 表示所有的大写字母

    [:alpha:] 表示所有的字母,

    [:alnum:] 相当于[0-9a-z]

    [:space:] 相当于空白字符

    [:punct:] 表示所有的标点符号

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。

    3、请使用命令行展开功能来完成以下练习:

    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d

    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │?? └── grub
    ├── dev
    ├── etc
    │?? ├── rc.d
    │?? │?? └── init.d
    │?? └── sysconfig
    │?? └── network-scripts
    ├── lib
    │?? └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │?? └── local
    │?? ├── bin
    │?? └── sbin
    └── var
    ├── lock
    ├── log
    └── run

    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?

    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。

    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。

    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。

    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。

    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    Linux干货 2017-12-11