linux中常用文本处理工具

   在linux文件系统中经常会使用到文本处理工具,这里简单介绍几种文本处理工具:

抽取文本的工具

文件内容:less和cat

文件截取:head和tail

按列抽取:cut

按关键字抽取:grep , egrep

文件查看命令:cat, tac,rev,more,less

  cat命令是用户经常使用的用来查看文本文件的命令,cat命令是需要接收到标准输入然后再标准输出设备上。并且和cat命令相对应的还有tac,tev两个命令。

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

常用选项:

    -E: 显示行结束符$

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

    -A:显示所有控制符

    -b:非空行编号

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

   cat查看文件是顺序查看,标准输入什么格式就输出什么格式。而tac命令,从字面上就可以看出它是cat倒过来写的,使用tac查看文件就会倒叙显示输出,即第一行最后显示,最后一行首先显示。而rev命令输出的格式和它们两个又不一样,rev命令是将文件中的每行内容以字符为单位反序输出,即一行之中,第一个字符最后输出,最后一个字符首先输出。

1.png

   使用cat命令查看文件是一下全部显示,小文件还好,遇到大文件就麻烦了。而more命令显示一页后会自动停下,并在地步出现提示信息,显示当前位置所示全文的百分比。

more: 分页查看文件

语法:more [OPTIONS…] FILE…

常用选项: -d: 显示翻页及退出提示

   more命令是一个文件过滤器,它以全屏幕的方式按页显示文本文件的内容,支持关键字查找。内置若干快捷键,常用快捷键H (获取帮助信息),Enter (向下翻一行),空格键(向下翻一屏)B(向上翻一屏)Q(退出)

    

   

   more命令查看大文件很方便,但是也有一个缺点就是不能向上翻页,只能向前走,没有回头路。。。想要回头查看就需要用到less命令了。

less:一页一页地查看文件或STDIN输出

查看时有用的命令包括:

    /文本搜索文本

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

   less命令是man命令的命令十分相似,不同的是less命令允许向上翻页。less命令显示文件时,用Pageup向上翻页,使用Pagedown向下翻页。


显示文本前或后行内容

  有时查看文件这是想查看文件的前几行或后几行,并没有想查看全部。这时就需要用到head和tail命令 。

head命令:意如其名,用于显示文件的开头的内容,默认显示文件的钱10行,也可指定行数。

语法:

    head [OPTION]… [FILE]…

常用选项:

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

    -n #: 指定获取前#行

    -#:指定行数

tail命令:显示文件的后几行内容,默认是显示文件的末尾10行。

语法:

    tail [OPTION]… [FILE]…

常用选项:

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

    -n #: 指定获取后#行

    -#:指定行数

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

2.png


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

cut命令:用来显示文件中指定行中的部分,经常用来切割显示文件信息。

语法:

    cut [OPTION]… [FILE]…

常用选项:

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

    -f FILEDS:

      #: 第#个字段

      #,#[,#]:离散的多个字段,例如1,3,6

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

      混合使用:1-3,7

    -c按字符切割

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

如:显示系统中所有用户的UID和shell类型

    用户的UID和shell类型信息都在/etc/passwd文件中。文件是以“:”为分割符。UID和shell类型分别在第3和7列。

3.png

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

语法:

    paste [OPTION]… [FILE]…

常用选项:

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

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

    paste f1 f2

    paste -s f1 f2

    

分析文本的工具

文本数据统计:wc

 计数单词总数、行总数、字节总数和字符总数, 可以对文件或STDIN中的数据运行

例:wc story.txt

  39  237 1901  story.txt

  行数 字数 字符数

常用选项:

    使用-l来只计数行数

    使用-w来只计数单词总数

    使用-c来只计数字节总数

    使用-m来只计数字符总数

整理文本:sort

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

语法:sort [options]  file(s)

常用选项:

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

    -n执行按数字大小整理

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

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

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

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

比较文件:diff和patch

比较两个文件之间的区别

例:

diff  foo.conf-broken  foo.conf-works

5c5

<use_widgets=no

>use_widgets=yes

注明第5行有区别(改变)

4.png

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

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

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

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

$diff -u foo.conf-broken  foo.conf-works > foo.patch

$patch -b  foo.conf-broken  foo.patch

文件排序sort

sort命令:把整理过的文本显示在STDOUT,不改变原始文件

语法:sort  [options] file(s)

常用选项:

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

    -n执行按数字大小整理

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

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

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

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

文件整理uniq

uniq命令:从输入中删除重复的前后相接的行,一般与sort命令结合使用。(连续且完全相同方为重复)

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

常用选项:

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

    -d: 仅显示重复过的行

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

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

    sort userlist.txt | uniq-c

例:查出用户UID最大值的用户名、UID及shell类型

[root@localhost ~]# cut -d: -f1,3,7 /etc/passwd | sort -t: -k2 -n | tail -1

5.png


文本过滤工具

: grep,egrep,fgrep

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

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

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

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

    grep root   /etc/passwd

    grep "$USER"  /etc/passwd

    grep '$USER'  /etc/passwd

    grep `whoami`  /etc/passwd

常用选项:

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

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

    -i: 忽略字符大小写

    -n:显示匹配的行号

    -c: 统计匹配的行数

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

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

    -A #: after, 后#行

    -B #: before, 前#行

    -C #:context, 前后各#行

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

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

    -w:整行匹配整个单词

    -E:使用ERE

正则表达式:

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

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

正则表达式分为两类:

    基本正则表达式:BRE

    扩展正则表达式:ERE

        grep -E, egrep

基本正则表达式元字符:

      字符匹配:

                     .  : 匹配任意单个字符

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

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

                   [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

      匹配次数:  用在要指定其出现的次数的字符的后面,用于限制其前面的字符出现的次数;模式使用贪婪模式;

                * : 匹配其前面的字符任意次;0,1,多次

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

                \? : 匹配其前面的字符0此或1次;即前面的字符是可有可无的

               \+ : 匹配其前面的字符1次或多次;即前面的字符出现至少1次

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

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

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

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

     位置锚定:

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

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

                ^$:空白行

               ^PATTERN$:用于PATTERN来匹配整行

            单词:非特殊字符组成的连续字符都称为单词

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

               \>或\b:词尾锚定。用于单词右侧

                \<PATTERN\>:精确匹配完整单词

                

     分组及引用

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

                分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为

                    \1: 从模式左侧起,第一个()内所匹配到的字符

                    \2 :从模式左侧起,第二个()内所匹配到的字符

                    \3:

                ……

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

例:

1、在/etc/passwd文件中找以root开头中间也有root的行

6.png

2、找出/etc/passwd中的两位或三位数

[root@localhost ~]# grep "\<[0-9]\{2,3\}" /etc/passwd

7.png

egrep及扩展的正则表达式

egrep与grep区别:

egrep为 grep 的扩充版本, 改良了许多传统 grep 不能或不便的操作. 比方说:

    grep 之下不支持 ? 与 + 这两种 modifier, 但 egrep 则可.

    grep 不支持 a|b 或 (abc|xyz) 这类"或一"比对, 但 egrep 则可.

    grep 在处理 {n,m} 时, 需用 { 与 } 处理, 但 egrep 则不需.

egrep:    支持扩张的正则表达式实现类似于grep文本过滤功能:grep -E

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

               选项和grep相同,-G支持基本正则表达式


扩展正则表达式的元字符

       字符匹配:

                        .  : 匹配任意单个字符

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

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

      

       次数匹配:  用在要指定其出现的次数的字符的后面,用于限制其前面的字符出现的次数;模式使用贪婪模式;

                * : 匹配其前面的字符任意次;0,1,多次

                ? : 匹配其前面的字符0此或1次;即前面的字符是可有可无的

               + : 匹配其前面的字符1次或多次;即前面的字符出现至少1次

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

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

                {0,n} :至多n次

                {m,} :至少m次

      位置锚定

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

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

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

               \>或\b:词尾锚定。用于单词右侧


     分组及引用

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

                分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为

                    \1: 从模式左侧起,第一个()内所匹配到的字符

                    \2 :从模式左侧起,第二个()内所匹配到的字符

                    \3:

                ……

                后向引用:引用前面的分组括号中的模式所匹配到的字符

 

     或:

            a | b : a或者b

            C | cat : C或者cat

            (C|c)cat:  Cat或者cat

fgrep:不支持正则表达式元字符

    fgrep 命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep 命令使用快速的压缩算法。

        当无需要用到元字符编写模式时,使用fgrep性能更好

例:

1、使用egrep取出/etc/rc.d/init.d/functions中其基名

[root@localhost ~]# echo "/etc/rc.d/init.d/functions" | egrep -o "[^/]+/?$"

8.png

2、显示ifconfig命令结果中所有IPv4地址

[root@centos7 ~]# ifconfig | egrep -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])\>"

1470477734237415.png

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

(0)
GrootGroot
上一篇 2016-08-07
下一篇 2016-08-07

相关推荐

  • 基于key验证和一些自动化运维工具

    pssh pscp.pssh Pslurp.pssh AIDE等

    2018-01-16
  • iptables 实现应用层过滤

        在linux环境中,工作于内核空间的netfilter和工作于用户空间的iptables共同组成了其功能强大且操作灵活的防火墙系统,对进出主机或内外网之间的流量基于IP地址、通信协议、端口以及连接状态等进行管控,然而,对于一些使用非固定端口或者通信协议的应用程序,默认是没有办法做限制的,比如聊天软件QQ、下载工具迅雷等,不过我们可…

    Linux干货 2015-07-10
  • 马哥教育21期网络班—第11周课程+练习—-成长进行时–不退步–上

    1、详细描述一次加密通讯的过程,结合图示最佳。 对称加密: 加密和解密使用同一个密钥; 缺点:如何通信方多的话,需要保存多组密钥 公钥加密:密钥是成对儿出现 公钥:公开给所有人;pubkey 私钥:自己留存,必须保证其私密性;secret key 特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然; 数字签名:主要在于让接收方确认发送方…

    Linux干货 2016-09-19
  • 树 非线性结构 树是n(n >= 0)个元素的集合: (1)每个元素称为结点(node); (2)有一个特定的结点,称为根结点或根(root); (3)除根结点外,其余结点被分成m(m>=0)个互不相交的有限集合,而每个子集又都是一棵树(称为原树的子树Subtree) 注意 n = 0时,称为空树 树只有一个特殊的没有前驱的元素,称为树的根(Ro…

    2017-10-16
  • 高级文件系统管理的相关理解

    1.RAID是什么     RAID:Redundant Arrays of Inexpensive Disks,是指由多个磁盘合成一个阵列,来提供更好的性能,冗余或者两者都提供。在生产生活中,通常一个硬盘往往不能满足我们的存储需要,这是就需要通过RAID磁盘阵列来对磁盘进行“扩容”,来满足我们的日常需要,相比较于单一…

    Linux干货 2016-08-30
  • MySQL备份与恢复

    备份与恢复 数据备份就是将数据以某种方式加以保留,以便在系统需要时重新恢复和利用。其作用主要体现在如下两个二方面: 在数据遭到意外事件破坏时,通过数据恢复还原数据 数据备份是历史数据保存归档的最佳方式 数据恢复就是把遭到破坏、删除和修改的数据还原为可使用的数据的过程 为什么要备份数据? 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分…

    Linux干货 2016-11-25