8.5文本处理工具及正则表达式

一、各种文本工具

    文件查看

    命令:cat,tac,rev

        cat optiong file

            -E:显示行结束符$

            -n:对显示出的每一行进行编号

            -A:显示所有控制符

            -b:非空行编号

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

            -v:查看windows下的^M

[root@localhost wang]# cat -n file1
     1	123456
     2	
     3	abcdwf
     4	
     5	
     6	

        tac:行倒过来显示

[root@localhost wang]# tac  file1



abcdwf

123456

        rev:每一行的字符反着显示

[root@localhost wang]# rev file1
654321

fwdcba

    分页查看文件内容

        more:分页查看文件

        more option file

            -d:显示翻页及退出提示

        less:一页一页的查看文件或stdin输出

            查看是有用的命令包括:

                n/N 跳到下一个或上一个匹配

        less 命令是man命令使用的分页器

    显示文本前或后行内容

        head:显示前面行

        head option file

            -c #:指定获取前#字节

            -n #:指定获取前#行

            – #:指定行数

        tail:显示后面行

        tail option file

            -c #:指定获取后#字节

            -n #:指定获取后#行

            – #:指定行数

            -f:跟踪显示文件新追加的内容,常用日志监控

[root@localhost wang]# cat file1
123456
789987
abcdwf
gebi
laowang
[root@localhost wang]# head -n1 file1
123456
[root@localhost wang]# tail -n1 file1
laowang

    按列抽取文本cut和合并文件paste

        cut option file

            -d delimiter:指明分隔符,默认tab

            -c:按字符切割

            -f fileds:

                #:第#个地段

                #,#:离散的多个字段, 例如-f 1,3,4

                #-#:连续多个字段,例如1-6

                混合使用1-3,8

            –output-delimiter+STRING指定输出分隔符显示文件或stdin数据的指定列

[root@localhost wang]# cut -d: -f1,3 --output-delimiter=+ /etc/passwd
root+0
bin+1
daemon+2
adm+3
lp+4
sync+5
shutdown+6
halt+7
mail+8
operator+11
games+12
ftp+14
nobody+99
systemd-bus-proxy+999
.....

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

            paste option file

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

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

[root@localhost wang]# paste -d / file1 file2
123456/12345
789987/qwdasd
abcdwf/12314
gebi/qwrqr
laowang/laowang

    收集文本统计数据wc

        计数单词总数、行总数、字节总数和字符总数

        可以对文件的stdin中的数据运行

            -l:只计数行数

            -w:只计数单词总数

            -c:只计数字节总数

            -m:只计数字符总数

[root@localhost wang]# wc file1
 5  5 34 file1
[root@localhost wang]# wc -l file1
5 file1
[root@localhost wang]# wc -w file1
5 file1
[root@localhost wang]# wc -c file1
34 file1
[root@localhost wang]# wc -m file1
34 file1

    文本排序sort

        把整理过的文本显示在stdout,不改变原始文件

            sort option file(s)

                -r:执行反方向(由上至下)整理

                -n:执行按数字大小整理

                -f:选项忽略(fold)字符串中的字符大小写

                -u:选项(独特,unique)删除输出总的重复行

                -t c:选项使用c作为字段界定符

                -k X:选项按照使用c字符分个的X列来整理能够使用多次

        uniq:从输入中删除重复的前后相接的行

            uniq option file

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

                -d:仅显示重复过的行

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

                连续且完全相同方为重复

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

                sort file | uniq -c

[root@localhost wang]# cat file2
2
2
33
33
12
12
23
23
[root@localhost wang]# sort -n file2 |uniq -c
      2 2
      2 12
      2 23
      2 33

    比较文件

        比较两个文件之间的区别

            diff file1 file2

[root@localhost wang]# diff file1 file2
2,4c2,4
< 789987
< abcdwf
< gebi
---
> qweq
> adaf
> afdqwr
注:2到4行不一样

    复制对文件改变patch

        diff 命令的输出被保存在一种叫做“补丁”的文件中

        使用-u选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

        patch命令复制在其他文件中进行的改变(要谨慎使用)

        使用-b选项来自动备份改变了的文件

[root@English6 wang]# diff -t file1 file2 > file3
[root@English6 wang]# rm -f file2
[root@English6 wang]# ll
total 8
-rw-r--r--. 1 root root 29 Aug  8 15:44 file1
-rw-r--r--. 1 root root 60 Aug  8 15:48 file3
[root@English6 wang]# patch -b file1 file3
patching file file1
[root@English6 wang]# ll
total 12
-rw-r--r--. 1 root root 31 Aug  8 15:48 file1
-rw-r--r--. 1 root root 29 Aug  8 15:44 file1.orig
-rw-r--r--. 1 root root 60 Aug  8 15:48 file3
注:当恢复file2文件是自动命名file1,而原file1文件自动命名后面加.orig的文件

二、grep全面搜索正则表达式并把行打印出来

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

        grep,egrep,fgrep(不支持正则表达式搜索)

    sed:stream editor,文本编辑工具

    awk:linux上的实现gawk,文本报告生成器

    grep::Global search REgular expression and Print out the line

    作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,打印匹配到的行

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

    grep option pattren file

[root@English6 wang]# grep --color=auto root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@English6 wang]# grep "$USER" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@English6 wang]# grep '$USER' /etc/passwd
[root@English6 wang]# grep `whoami` /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

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

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

        -i:忽略字符大小写

        -n:显示匹配的行号

        -c:统计匹配的行数

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

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

            echo $?:查看找没找到 0:表示匹配到了

        -A #:显示后#行

        -B #:显示前#行

        -C #:显示前后各#行

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

例如:grep -e 111 -e 222 file 找到file中有111或者222的行

        -w:正行匹配整个单词

        -E:使用ERE

[root@English6 wang]# cat file1
root
wang
laowang
gebilaowang
wang
23
4
56
7
gebidashu
LAOWANG
[root@English6 wang]# grep -v "wang" file1
root
23
4
56
7
gebidashu
LAOWANG
[root@English6 wang]# grep -i "laowang" file1
laowang
gebilaowang
LAOWANG
[root@English6 wang]# grep -n "wang" file1
2:wang
3:laowang
4:gebilaowang
5:wang
[root@English6 wang]# grep -c "wang" file1
4
[root@English6 wang]# grep -o "wang" file1
wang
wang
wang
wang
[root@English6 wang]# grep -q "wang" file1
[root@English6 wang]# echo $?
0
[root@English6 wang]# grep -A2 "4" file1
4
56
7
[root@English6 wang]# grep -B2 "4" file1
wang
23
4
[root@English6 wang]# grep -C2 "4" file1
wang
23
4
56
7
[root@English6 wang]# grep -e "gebi" -e "root" file1
root
gebilaowang
gebidashu
[root@English6 wang]# grep -w "wang" file1
wang
wang

三、正则表达式

    regexp:有一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

    程序支持:grep,vim,less,nginx等。

    分为两类:

        基本正则表达式:BRE

        扩展正则表达式:ERE

    正则表达式引擎:

        采用不同算法,检查处理正则表达式的软件模块

        PCRE(Perl Compatible Regular Expressions)

        元字符分类:字符匹配,匹配次数,位置锚定,分组

    字符匹配:

        .:匹配任意单个字符

        []:[]内的任意单个字符

        [^]:除[]内的任意单个字符

        [:digit:]:所有数字

        [:lower:]:所有小写字母

        [:upper:]:所有大写字母

        [:alpha:]:所有字母,包括大小写

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

        [:punct:]:所有标点符号

        [:space:]:空格和tab

    匹配次数:

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

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

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

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

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

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

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

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

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

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

    位置锚定:

        定位出现的位置

        ^:行首

        $:行尾

        ^pattern$:用于模式匹配正行

        ^$:空行

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

        \<或\b:词首锚定

        \>或\b:词尾锚定

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

    分组:

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

            例如:\(root\)\+  匹配root在文件行中最少一次

        分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3……

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

        后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

[root@English6 wang]# cat file1
root1wangrootwang
rootwang2rootwang
rootwangroot3wang
root1wangruutwaag
rootwang2ruutwaag
rootwangruut3waag
[root@English6 wang]# grep "\(r..t\).*\(w..g\)\1\2" file1
root1wangrootwang
[root@English6 wang]# grep "\(r..t\)\(w..g\).*\1\2" file1
rootwang2rootwang
[root@English6 wang]# grep "\(r..t\)\(w..g\)\1.*\2" file1
rootwangroot3wang

    扩展正则表达式

        egrep option pattern file

        字符匹配:

            .:匹配任意单个字符

            []:[]内的任意单个字符

            [^]:除[]内的任意单个字符

        次数匹配:

            *:匹配前面字符任意次

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

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

            {n}:匹配前面的字符n次

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

 

        位置锚定:

            ^:行首

            $:行尾

            \<或\b:词首锚定

            \>或\b:词尾锚定

        分组:

            ()

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

        或者:

            a|b:a或者b

            C|cat:C或cat

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

(0)
上一篇 2016-08-10 15:03
下一篇 2016-08-10 16:07

相关推荐

  • SQL优化大全

    1. 优化SQL步骤 1. 通过 show status和应用特点了解各种 SQL的执行频率        通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extende d-status 命令获得。 SHOW STATUS 可以根据需要显示 session 级别的统计结果和 g…

    Linux干货 2015-04-13
  • 马哥教育30期学员开学典礼

         早上背上书包去学校报到,很有一番学生时期去新学校的感觉,既兴奋又紧张,一段新的人生历程即将开始。      大学时曾经劝说我的同学别逃选修课,我说也许你苦学四年的专业比不上一节选修课对你的将来更有用,如今我却用亲身经历验证了这句话,我是通过大学的一堂选修课了解的Linux系统,开源软件,没想到多年后今天的我竟然也要入这行了。       到教室后,…

    2018-03-26
  • mariadb基础应用

    mariadb基础应用 一、 前言 MariaDB is one of the most popular database servers in the world. It’s made by the original developers of MySQL and guaranteed to stay open source. Notable users …

    Linux干货 2016-12-16
  • N21_第x周_Storm_01_单机实践篇

       这2周没有按马哥安排的课程走,因公司需要,大家一直在试尝大数据这块。作业不能不做,也不知道马哥哪周的作业会有storm,只好先将这段时间的实验慢慢记录下来(其它flume、kafka、spark等本周会慢慢补充),等知道具体的作业题目后,再完善。 实验目的   了解storm的原理,并用storm单机版实验加深理解,为后面…

    Linux干货 2016-09-15
  • 1. linux basic cmd

    一。 国有股加点廉价航空j 1. 2. 二。

    2017-11-13
  • 磁盘冗余阵列 RAID

    一、磁盘冗余阵列 RAID(Redundant Array of Independent Disk)     RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。根据磁盘陈列的不同组合方式,可以将RAID分为不同的级别。 其中提高传输速率和…

    Linux干货 2016-09-07