常用文本处理工具及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)
cutemsyucutemsyu
上一篇 2016-08-11
下一篇 2016-08-11

相关推荐

  • CentOS系统启动流程–上

    centos6启动流程 1.加载BIOS的硬件信息,获取第一个启动设备。 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 动所有的硬件设备。 4.核型执行init程序并获取运行信息。 5.Init执行/etc/rc.d/rc.sysinit文件。 6.启动核心的外挂模块(/etc/m…

    Linux干货 2016-09-13
  • mysql基础篇(一些基本概念的总结)

    一、安装以及初始化     软件包来源         1. vendor, rpm           2. 官网,source code 编译 &…

    Linux干货 2015-12-03
  • Linux哲学思想和常用命令的用法

    Linux哲学思想:    (1)、一切皆文件:               不仅普通的文件,目录、字符设备、块设备、套接字等在Unix、Linux中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套…

    2017-07-02
  • 马哥教育网络班21期+第五周博客作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@C67-X64-A0 ~]# grep "^[[:space:]]\+" /boot/grub/grub.conf      root (hd0,0…

    Linux干货 2016-08-05
  • grep命令及正则表达式

    grep命令和正则表达式 grep基本概念 grep:global search regular expression and print out the line. 作用:文本过滤器,用于文本搜索,用指定“模式”逐行匹配。 模式:由正则表达式字符及文本字符所编写的过滤条件 正则表达式:由一类特殊字符和文本字符所编写的模式,其有些字符不表示字符字面意义,而表…

    Linux干货 2016-11-05
  • 计算机构成与Linux基础知识之一

    简述计算机构成,Linux如何诞生及主流发行版;简单命令介绍;如何获取帮助及Linux目录命名及功用简介绍。

    2018-02-26