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)
DYWDYW
上一篇 2016-08-10
下一篇 2016-08-10

相关推荐

  • Python入门之闭包,匿名函数,过滤器,映射器,折叠

    在学习python函数的过程中,函数的高阶应用包括闭包lambda函数,过滤器等都让我头痛不已.接下来我把课堂中听到的笔记进行整理,再写一遍,希望在提醒自己的同时也能帮助到别人. 首先,我们来看一下什么是闭包,闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见…

    Linux干货 2015-12-19
  • 系统启动流程相关概念

    前言: 了解系统内核基本知识 内核功能:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能等  用户空间:应用程序其中有进程或者线程 运行中的系统可分为两层:内核空间、用户空间  内核设计流派:  单内核设计:把每种功能集成于一个程序中;例如:linux 微内核设计:每种功能使用一个单独的子系统实现;例如:Window…

    Linux干货 2016-09-19
  • 马哥linux0803作业内容

    1. 创建sysadmins组 将用户user1,user2,user3加入sysadmins组中 将user3设置为sysadmins的管理员 用user3登录,将user2从组中移除 设置sysadmins的密码centos 设置user1 在创建新文件时,文件的所属组为sysadmins 删除user1…3 删除sysadmins 2、三种权限rwx对…

    Linux干货 2016-08-05
  • 定时任务应用示例

    定时任务应用示例 1.每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202 mkdir /backup crontab -e * */4 * * * cp -ar /etc/ /backup/etc-$(date +%Y%m%d%H%M) 2.每周2,4,6备份/var/log/messages…

    Linux干货 2017-08-06
  • 马哥Linux第二周学习笔记

    文件管理,用户管理,权限管理

    Linux干货 2017-12-23
  • 文件寻踪和文件压缩

    文件查找工具: 文件:根据文件的种属性去找到相应文件 文件查找工具:locate, find locate: 根据此前updatedb命令生成的数据库来完成文件查找查找速度很快非实时查找,结果不精确;模糊查找; 必要时,可手动执行updatedb命令; find命令:   通过遍历指定的目标目录,实时查找符合指定属性的文件; 精确匹配;速度略慢; …

    Linux干货 2016-08-19