常用文本处理工具及grep和正则表达式

一、文件查看命令

(1)普通查看工具:cat,tac,rev

 1、cat命令常用选项

   -n:显示行号

   -E:显示行结束符$

   -A:显示所有控制符

 2、tac:从最后一行开始倒序显示

 3、rev:将每一行的内容反转显示

 

(2)分页查看内容:more,less

 less功能比more多

 less是man帮助使用的分页器,用法与man相同

(3)显示文本前或后行内容:head,tail

 1.head与tail通用选项

 -c#:获取指定#字节内容

 -n #或-#:获取指定行数

 2.tail-f:跟踪显示文件新追加内容

二、文本处理工具

(1)按列抽取文本工具:cut

 -c:按字符切割

 -d:按分隔符切割

 -f:指明显示区域

 如,-f1、-f 1,3,5、-f 2-4、-f 1,5-9

 查看passwd文件,显示UID及shell类型

[root@centos7 tmp]# head -5 /etc/passwd |cut -d: -f3,7
0:/bin/bash
1:/sbin/nologin
2:/sbin/nologin
3:/sbin/nologin
4:/sbin/nologin

(2)分析文本的工具:wc,sort,uniq

 1. wc:统计行数,单词数,字符数,字节数

 -l:只统计行数

 -w:只统计单词数

 -m:只统计字符数

 -c:只统计字节数

 如下,分别显示行数,单词数,字符数

[root@centos7 tmp]# wc /etc/passwd
  48   93   2513 /etc/passwd

(3)文本排序工具:sort

 把排序后的文本输出到STDOUT,不改变原文件

 常用选项:

 -n:按数字大小排序

 -h:按人类易读单位排序

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

 -u:删除选项中重复的行

 -t:按指定分隔符

 -k #:按分隔符隔开的第#列进行排序,可重复使用

(4)重复行处理工具:uniq

 常用选项:

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

 -d:仅显示重复的行

 -u:仅显示不重复的行

 常和sort结合使用

 sort|uniq -c

 例子,统计所用用户shell类型使用个数

[root@centos7 ~]# cut -d: -f7 /etc/passwd|uniq -c         #没有sort排序得到错误结果  
      1 /bin/bash
      4 /sbin/nologin
      1 /bin/sync
      1 /sbin/shutdown
      1 /sbin/halt
     35 /sbin/nologin
      4 /bin/bash
      1 /sbin/nologin
[root@centos7 ~]# cut -d: -f7 /etc/passwd|sort|uniq -c   #sort结合uniq使用得到正确结果
      5 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     40 /sbin/nologin
      1 /sbin/shutdown

(5)其他工具:paste,diff,patch

 1.paste:将连个文件同行合并

 2.diff:比较两个文件的区别

 3.patch:复制在其他文件中的改变

diff -u file.old file.new >patch.dd       #将比较信息输出到文件中
patch file.old patch.dd                   #通过补丁对文件更新

三、grep

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

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

 egrep等价于grep -E,支持扩展正则表达式

 fgrep等价于grep -F 不支持正则表达式,但速度快

 (1)grep [OPTIONS] PATTERN [FILE…]

 常用选项:

 -n:显示匹配的行号

 -c: 统计匹配的行数

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

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

 -i: 忽略字符大小写

 -w:整行匹配整个单词

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

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

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

 -A #:after, 后#行

 -B #: before, 前#行

 -C #:context, 前后各#行

 -E:使用ERE

四、正则表达式

 REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,

 而表示控制或通配的功能。

 正则表达式分为两类:

 1.基本正则表达式:BRE

 2.扩展正则表达式:ERE

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

(1)字符匹配

 –构成模式的基本元素 

 . : 匹配任意单个字符

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

    [0-9],[a-zA-Z],[a-z0-9]…

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

    [^0-9]非数字

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

(2)匹配次数

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

 *:匹配前面的字符任意次,包括0次;贪婪模式:尽可能长的匹配

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

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

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

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

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

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

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

(3)位置锚定

 位置锚定:定位出现的位置;更加精确描述字符的位置

 –这部分用法比较灵活,容易忘记锚定,造成错误匹配

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

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

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

   ^$: 空行

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

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

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

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

(4)分组

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

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

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

 实例: \(string1\+\(string2\)*\)

 \1: string1\+\(string2\)*

 \2: string2

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

 例子:添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用  户名同shell名的行

[root@centos7 movie]# egrep "^(.*\>).*\1$" /etc/passwd  
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:1005:1005::/home/nologin:/sbin/nologin

 ^(.*\>)——某个开头的单词

 \1$———-以(.*\>)这个单词结尾

 这样就找到符合题意的行

 扩展正则表达式的元字符

(1)字符匹配

 保持不变

(2)匹配次数

 \+ –> +

 \? –> ?

 \{\} –> {}

(3) 位置锚定

 保持不变

(4) 分组

 \(\) –>()

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

(5) 或者表示 

 cat|dog :cat或dog

 (C|c)at:Cat或cat

 

 *****牛刀小试****** 

 

 1、显示当前系统root、fly或halt用户的UID和默认shell

 2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

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

 4、使用egrep取出上面路径的目录名

 答案:

 1.egrep "^(root|fly|halt)\>" /etc/passwd|cut -d: -f3,7

 2.egrep "^[a-zA-Z_]+\(\).*" /etc/rc.d/init.d/functions

 3.egrep -o "[^/]+/?$"

 4.egrep -o ".*\<"

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

(0)
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相关推荐

  • Linux文件和目录管理类命令初识

    简述 在Linux操作系统使用过程中,因为运维需要频繁的对文件、目录进行操作,所以需要学习一些关于文件、目录的命令 Linux上文件是什么? 「文件」:存储空间存储的一段流式数据,可以按名「存取」这些数据 常见文件类型 -:常规文件d:目录文件b:块设备文件,以「block」为单位进行随机访问,常见设备「硬盘」c:字符设备文件,以「character」为单位…

    Linux干货 2016-11-06
  • echo address

    echo address

    Linux干货 2016-08-08
  • Linux中的cut、sort、uniq以及用户(组)管理类指令应用示例

    Linux中的cut、sort、uniq指令 列出当前系统上所有已经登录的用户的用户名,注意:同一用户登录多次,只显示一次。 解决思路: 先使用who指令显示出所有已登录的用户。然后对who指令的输出进行切割得到想要的第一列内容,即只包含用户名。可以使用cut指令。最后对cut的结果进行排序并去重。可以使用sort指令。   借助管道符,可以方便的…

    Linux干货 2016-11-13
  • Shell脚本基础练习

    脚本编程能力是作为运维工程师不可或缺的一项基本技能,各种系统的运维,如果完全靠命令行一条一条命令来执行,工作效率可想而知,而脚本却可以将完成一定功能的各个命令依据一定的流程控制,逻辑判断去完成某种功能,提升工作效率。学习shell脚本,光学习理论是远远不够的,所以在学习中要多多练习,下面就看一些关于shell脚本基础的练习 (1) 编写脚本/root/bin…

    2017-08-05
  • 学习宣言

    让学习溶入生活,做一个优秀的专业人才。

    Linux干货 2016-10-30
  • linux目录基础、简单的命令以及运用linux帮助

    计算机组成及其功能     计算机其实是:接收用户输入指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息。所以计算机组成可以分为输入单元、输出单元、CPU(控制单元、算术逻辑单元)、内存     输入单元:包括键盘、鼠标、扫描仪、手写板、触摸屏等;实现…

    Linux干货 2016-09-17