Linux文本处理工具和正则表达式

概述:

    Linux核心哲学思想中很重硬件要的一条内容就是一切皆文件,在Linux系统上,无论硬件、软件、配置文件等等一切,都以文件形式呈现出来。一般文件类型有:普通文件、目录文件、链接文件、管道文件、套接字文件、字符设备文件、块设备文件等。而普通文件里面又有一些文本文件、二进制文件等细分化的文件类型,而我们日常系统管理工作,主要就是对一些文本类型的文件,进行新增、删除、修改、查询等相关操作,来完成系统的维护,那么对文本处理就变成了我们必不可少的基础既能。

    本章就先简单介绍一些文本的查看,分析,统计工具,以及正则表达式和grep的相关内容,主要的内容包含以下几个部分:

        1、文本查看工具介绍(cat、tac、rev、head、tail、more、less、cut、paste)

        2、文本统计工具介绍(wc、sort、uniq)

        3、文本比较工具介绍(diff、patch)

        4、基本正则表达式和扩展正则表达式介绍

        5、文本处理三剑客之grep介绍

    涉及到的命令主要有:cat、tac、rev、head、tail、more、less、cut、paste、wc、sort、uniq、diff、patch、grep、egrep、fgrep

第一章    文本查看工具介绍

    1、cat文本查看工具

        语法:cat [OPTIONS] FILE

        常用选项:

            -n  显示行号,空白行也加

            -b  显示行号,空白行不加

            -ns  显示行号,然后出去重复的行显示为一行(相邻且相同)

            -T  显示TAB键

            -v  显示^M ,也就是\r 的内容,相当于显示Windows的换行键

            -A  显示所有的内容,所有的隐藏字符,TAB、换行之类的

        示例:

        blob.png

    2、tac:文本查看工具,与cat一样,只是把cat的内容按行倒序显示

        示例:

        blob.png

    3、rev:反向显示文件中每一行的内容

        例如:如文件中是abcdefg,如果用rev显示,则显示为gfedcba

        blob.png

    4、head:显示文件的前几行,默认是前10行

        语法:head [OPTIONS] FILE…

        常见选项:

            -n 数字:表示显示文件的前几行

            -数字:与-n 数字  功能一样,显示文件的前几行

            -c 数字:表示显示文件的前多少个字节,而不是多少行

        示例:

        blob.png

    5、tail:显示文件的后几行,默认是10行

        语法:tail [OPTIONS] FILE…

        常见选项:

            -n 数字 :显示文件后几行

            -数字:与-n 数字 功能一样,显示文件的后几行信息

            -n +数字: 从第几行开始显示文件信息

            -c 数字:显示文件的后多少个字节,而不是后几行

        blob.png

    6、more:分页显示文件内容,只能向下翻页,不能向上翻页

        选项:    

            -d  能显示提示信息

        在more界面中,可以运行:

            !执行外部命令

            /string  搜索关键字          

            !COMMAND  在more界面下,执行bash命令结果显示在more界面中,不用退出more

            q 退出more界面

    7、less:分页显示文件内容,既能向上翻页,又能向下翻页  

        在less界面时:

            /string  向下搜索关键字

            ?string  向上搜索关键字

                n  按照搜索方向,顺向显示下一个匹配到的内容

                N  按照搜索方向,逆序显示下一个匹配到的内容

            !COMMAND  在less界面下,执行某命令,不用退出less

            q 退出less界面

    8、cut:字段截取工具,按照指定的分隔符进行分割后显示,默认分隔符为TAB键  

        语法:cut[OPTION]…[FILE]…

            -d   指定分隔符,默认为tab

            -f FILEDS 

                # 第#个字段

                #,#,…   离散的多个字段,如-f1,3,6

                #-#    连续的多个字段,如-f1-3

            -c  按字符切割,取第几个字符到第几个字符数显示的内容

            –output-delimiter=STRING  指定输出分隔符

        示例:

        blob.png

        

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

        选项:

            -d 分隔符  合并时指定分隔符,默认为tab

            -s   将一个文件所有行合并成一行显示

        示例:

        blob.png

第二章    文本统计工具介绍

    1、wc  统计工具

        语法:wc [OPTION]… FILE

            -l  显示多少行

            -c  显示多少个字节,3个字节标识一个汉字,但是1个汉字只算一个字符

            -w  显示单词数量

            -m  显示字符数

        示例:

        blob.png

    2、sort  排序命令

        语法:sort [OPTIONS]… FILE 排序时默认是按字符a-z排序

        常用选项

            -r 逆序显示

            -n 按数字大小排序

            -f 忽略字符大小写

            -u 删除结果中的重复行(不管相不相邻,都去重)

            -t STRING 选项使用指定字符做为字段界定符

            -k X 选项按照使用上面-t字符分隔的X列来整理能够使用多次

        示例:

        blob.png

        

    3、uniq:去重显示,(相邻且相同才认为是重复)

        语法:uniq [OPTION]… [FILE]…

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

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

            -u: 仅显示不曾重复的行;

                连续且完全相同方为重复

            常和sort 命令一起配合使用:

                sort userlist.txt | uniq -c

        示例:

        blob.png

第三章    文本比较工具介绍

    1、diff  比较两个文件之间的不同之处

        语法:diff [OPTIONS] FILE1  FILE2

        常用选项:

            -u  表示利用重定向,将不同之处生成补丁文件,以供利用patch还原用

        示例:

        blob.png

    2、patch补丁工具,复制改变的数据到文件中

        语法:patch [OPTIONS] FILE  PATCHFILE

        选项:

            -b  表示自动备份改变了的文件

        示例:

        blob.png

        blob.png

第四章    基本正则表达式和扩展正则表达式介绍

    1、基本正则表达式

        字符匹配:

            . : 匹配任意单个字符;

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

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

            [0-9]:匹配0-9之间的数字

            [1-9]:匹配1-9之间的数字,注意向匹配10-19之间的数字不能写成[10-29],要每一位分别写[1-2][0-9]

            [:digit:]:匹配数字

            [:lower:]:匹配小写字母

            [:upper:]:匹配大写字母

            [:alpha:]:匹配所有大写和小写字母

            [:alnum:]:匹配数字和大小写字母

            [:punct:]:匹配标点

            [:space:]:匹配空白字符

        

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

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

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

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

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

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

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

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

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

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

        

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

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

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

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

            ^$: 空行

            ^[[:space:]]*$ :空白行

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

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

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

        

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

        后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)利用: \1, \2, \3, …来引用前面第一个括号、第二个括号…匹配到的内容        

            如: \(niwenchao\+\(nwc\)*\)

                \1: niwenchao\+\(nwc\)*

                \2: nwc

        

        示例:

         # grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd

        blob.png

    2、扩展正则表达式

        个人总结为:相比基本正则表达式,一些需要转义的位置,除了词首词尾锚定\<\>都不需要加转义符,另外增加了或关系的表达式(|)  

        字符匹配:

            . 任意单个字符

            [] 指定范围的字符

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

            [0-9]:匹配0-9之间的数字

            [1-9]:匹配1-9之间的数字,注意向匹配10-19之间的数字不能写成[10-29],要每一位分别写[1-2][0-9]

            [:digit:]:匹配数字

            [:lower:]:匹配小写字母

            [:upper:]:匹配大写字母

            [:alpha:]:匹配所有大写和小写字母

            [:alnum:]:匹配数字和大小写字母

            [:punct:]:匹配标点

            [:space:]:匹配空白字符

        次数匹配:

            *:匹配前面字符任意次

            ?: 0或1次

            +: 1次或多次

            {m}:匹配m次

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

        

        位置锚定:

            ^ :行首

            $ :行尾

            \<, \b :词首

            \>, \b :词尾

        

        分组:

            ()

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

        或者:

            a|b

            C|cat: C或cat

            (C|c)at:Cat或cat

第五章    文本处理三剑客之grep介绍  

    grep:过滤出特定的行

        grep 支持标准正则表达式

        egrep  支持扩展正则表达式,相当于grep -E

        fgrep  不支持正则表达式

    语法:grep [OPTIONS] PATTERN [FILE…]

    选项:

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

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

        -i: 忽略字符大小写

        -n: 显示匹配的行号,匹配到的是第几行

        -c: 统计匹配的行数,匹配到了多少行

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

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

        -A #: after, 后#行,除了显示匹配到的行外,还显示匹配到的行的后几行

        -B #: before, 前#行,除了显示匹配到的行外,还显示匹配到的行的前几行

        -C #: context, 前后各#行,除了显示匹配到的行外,还显示匹配到的行的前后各几行

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

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

            多个-e 之间是或关系

        -w:整行匹配整个单词,只能匹配整个单词,不能是一个单词的一部分,前后可以是符号,但是不能是字母

        -E:使用ERE,相当于egrep

        -F:相当于fgrep,不支持正则

        

        nmap -sP -v 10.1.252.210/24  表示扫描该网段的主机

        查看网段内有哪些主机处于连接状态:

        nmap -sP -v 10.1.252.210/24 |grep -B1 “up”|grep -v “up”

    blob.png

    blob.png

    正则表达式表示身份证号

        1:     [1-9]

        2-6:   [0-9]{5}

        78:    (19|20|21)

        9-10   [0-9]{2}

        11-12  ((0[1-9])|11|12)

        13-14  ((0[1-9])|([12][0-9])|(3[0-1]))

        15-17  [0-9]{3}

        18     [0-9X]

   # egrep "\<[1-9][0-9]{5}(19|20|21)[0-9]{2}((0[1-9])|(10|11|12))((0[1-9])|([12][0-9])|(3[0-1]))[0-9]{3}[0-9Xx]\>" 

    blob.png

    找出ifconfig命令结果中本机的所有IPv4地址

    # ifconfig|grep -E -o "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

    1.png

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

(0)
M20-1倪文超M20-1倪文超
上一篇 2016-08-07
下一篇 2016-08-07

相关推荐

  • 文件查找与解压缩

    文件查找 脚本文件名的查询 which(寻找执行文件) which [-a] command -a :将所有由PATH目录中可以找到的命令均列出,而不只是第一个被找到的命令名称 文件名的查找 文件查找:实时查找:遍历所有文件进行条件匹配;(find)非实时查找:根据索引查找;(whereis、locate) whereis whereis [-bmsu] […

    Linux干货 2017-04-08
  • 马哥教育网络班21期+第六周课程练习

    第六周作业 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; cp /etc/rc.d/rc.sysinit /tmpvim /tmp/rc.sysinit # 命令模式下,输入一下内容:%s@\(^[[:space:]]…

    Linux干货 2016-10-17
  • 命令read

    read命令是一个bash命令,它用于从键盘或标准输入中读取文本.我们可以使用read以交互的形式读取来自用户的输入.并且read还提供一种不需要按回车就能够输入参数的方法. read可以从标准输入中读取单独的一行,或者使用-u选项,从文件描述符FD中读取.并且这单独的行被分隔成多个域,第一个词被赋值给第一个变量,第一个赋值给第二个变量,以此类推,直到剩下的…

    Linux干货 2016-08-12
  • 第三周学习总结之简单文本处理

    写在最前 通过前面的学习,我们已经知道Linux是一个一切皆文件的系统,因此对文件的处理就显得尤为重要,到目前为止,对于新手来说可能连鼎鼎大名的三剑客也未必听过,不过在这之前我们也可以使用一些非常好用的文本处理工具来完成一些简单文件的处理。本次内容就是讲讲如何使用几个简单文本处理工具的组合完成一些实用的功能。 文本处理工具 文本处理工具,用我的理解就是能够对…

    2017-12-19
  • 配额、RAID、软RAID以及LVM管理

    磁盘配额允许控制用户或者组织对磁盘的使用,它能防止个人或者组织使用文件系统中超过自己使用的部分,或者造成系统完全拥堵。配额必须由root用户或者具有root权限的用户启用和管理。 硬RAID以及软RAID :RAID是Redundant Array of Independent Disks的简写,即独立硬盘冗余阵列,简称磁盘阵列。通过实现的方式不同…

    Linux干货 2016-11-23
  • 创建CA

    创建CA和申请证书 创建私有CA: 首先在CA服务器端创建CA。 先去看openssl的配置文件: /etc/pki/tls/openssl.cnf 一般我们不会去更改这个配置文件,但是要去看一下。我们是根据这个文件创建的CA. 这个文件里是openssl的配置文件,我们打开后只观察与CA有关的文件。   在文本中可以看出一个主机中可以有多个CA,…

    2017-07-28