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 22:07
下一篇 2016-08-07 22:07

相关推荐

  • 正则表达式及grep使用

    正则表达式分为:“基本正则表达式 BRE”跟“扩展正则表达式 ERE” 基本正则表达式:     (1)字符匹配               "."任意单个字符 &nbs…

    Linux干货 2016-07-10
  • 文件目录介绍

    对于操作系统的目录感觉总是记不住,今天结合上课笔记和自己的理解总结一下:/——-执行操作时总是要跳转到不同的目录,根是一个树状结构,下面介绍都是根下的目录以及相关介绍├── bin 存放用户使用的基本命令(可执行程序,二进制文件)、分区的时候不会单独给它分区├── boot  跟内核有关的文件├── cgroup &nbsp…

    Linux干货 2017-04-10
  • 【26期】Linux第八周学习小总结

        前言     本周的学习已经过去了,虽然本周学习中老师一直都有说,哎呀,这个不重要,以后有网络管理员给你们来做,了解一下就行,然而话锋一转就又说,其实小公司没有网络管理员,如果你们不好好学,以后就会做得更多更杂的工作,这一周的知识点基本上都是在一个pdf上的,大概有200…

    2017-09-02
  • 常见RAID级别

    什么是RAID?     独立磁盘冗余阵列(RAID,Redundant Arrary of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Arrary of Inexpensive Disks),简称磁盘阵列。基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、…

    Linux干货 2016-05-29
  • Linux系统解压缩

    Linux系统解压缩 gzip/gunzip 语法gzip [OPTIONS] + 压缩之后的路径 + 要压缩的文件 -#:压缩比 (不常用) -d:解压缩,相当于gunzip -c:将压缩后的数据输出至标准输出 -r:递归至目录中对每个文件进行压缩 zcat :查看压缩文件的内容 ——————————————————————————————————————…

    Linux干货 2017-08-15
  • DNS基础知识

    一、DNS介绍:   1、DNS: Domain  Name Service,域名解析服务;      部署方式为分布式部署,如图所示:        2、查询类型:     递归查询:仅发出一次请求,要求对方回复最终结果&nbs…

    Linux干货 2015-05-18