Linux入门之文本处理三剑客之grep

Linux入门之文本处理三剑客之grep

 文本处理工具:

 grep,sed(流编辑器),awk

 

 grep简述及特点

简介:全局搜索正则表达式出来的行并打印 (Global search REgular expression and Print out  the line),一种按照特定模式(pattern)的文本过滤工具

模式:pattern,通过有正则表达式(refexp)特殊字符以及文本字符组成的条件来过滤

正则表达式:refexp,有一些bash支持的特殊文本字符来表示特殊含义,如果特殊字符当原本字符匹配需要转义

 

 正则表达式一般分两类

 基本正则表达式: BRE

 扩展正则表达式: ERE

 

 grep 命令基本语法

 

 grep [option] [refexp]  file

    –color 用特定的颜色高亮显示模式中匹配的字符串,一般为红色

    -v  显示不被模式PATTERN匹配的行

    -o  表示只显示被模式匹配的字符,而不是整个行

    -q  静默模式不输出信息

    -A # after 显示到匹配到的后 #

    -B # before 显示到匹配的前 #

    -C # context 显示匹配的前后各几行

    -E  使用扩展正则表达式

        (基本和扩展的功能类似,只是转义方式不同)

 

 基本正则表达式:

 字符匹配

 . :  任意单个字符

 ? :  匹配其前单个字符01

 * :  匹配其前单个字符任意次

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

 [] : 表示匹配[]里的字符集,[ab]及包含ab的字符

 [^]: 表示匹配除了[]里的其它任意字符,[^ab]及不包含ab的字符

 

 []里同样支持特殊通配符:

 [0-9] 表示单个09的数字

 [:digit:] 表示所有数值,同上

 [a-z] [:lower:] 表示单个小写字母

 [A-Z] [:upper:] 表示单个大写字母

 [:alpha:] [a-zA-Z] 表示单个字母

 [:alnum:] 表示字母或数字

 [:space:] 匹配空格

 [:punct:] 表示所有标点符合

 注意:在使用中,[::]这种格式[::]里带特殊单词的需要再加[]来表示,比如匹配空格则为'[[:space:]]'

 

 次数匹配

 \?  : 0次或1

 \+  : 匹配其前字符一次以上

 \{m\}     :匹配其前字符m

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

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

 

字符锚定

 ^ : 行首锚定

 $ : 行尾锚定

 ^$ : 表示空行匹配

 \< \b: 行首锚定

 \> \b: 行尾锚定

 \<PATTERN\> 锚定匹配PATTERN的作为单词 \<root\>  \broot\b

 \(\) : 对()里匹配PATTERN的做分组

     \1为后项引用前面第一个分组

 

 

扩展正则表达式:

 

用法

grep -E 'PATTERN' [file]

egrep  'PATTERN'  [file]

 

字符匹配和基本相同

[] [^] [[::]] 用法一样

 

次数匹配

* 匹配前面字符任意次

? 01

+ 1次以上

{m} 匹配多少次

{m,} 至少m

{m,n} 只是m次,至多n

{0,n} 至多n

 

锚定和基本用法一样

 

分组直接使用(),不要用\转义

后项引用 \1 \2 \3

 

扩展的功能:

或者

(c|C)at : cat后者Cat

(root|tom|user1)

 

 

 

练习1

1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)
grep -i '^s' /proc/meminfo
grep  '^[Ss]' /proc/meminfo
grep  -E  '^(s|S)' /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep  -v  '/bin/bash$'  /etc/passwd
3、显示用户rpc默认的shell程序
grep  '^\<rpc\>'  /etc/passwd | cut -d: -f7
4、找出/etc/passwd中的两位或三位数
grep  '\<[0-9][0-9]\?\>'  /etc/passwd
grep  '\<[0-9]\{2,3\}\>'  /etc/passwd
5、显示/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行
grep  '^[[:space:]]\+.*[^[:space:]]'  /etc/grub2.cfg
6、找出"netstat -tan"命令的结果中以'LISTEN'后跟任意个空白字符结尾的行
netstat  -tan  '.*LISTEN[[:space:]]*$'
7、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行
grep  '^\<\(.*\)\>.*/\1$'  /etc/passwd
grep  '^\<\(.*\)\>.*\<\1\>$' /etc/passwd

 

练习2

1、显示当前系统root、mage或wang用户的UID和默认shell
grep -E '^(root|mage|wang)\>' /etc/passwd |cut -d: -f7
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
grep -E -o '^\<[[:alnum:]_]+\>\(\)' /etc/rc.d/init.d/functins
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo "/etc/rc.d/init.d/functions" grep -E -o '[^/]+/?$'
4、使用egrep取出上面路径的目录名
echo "/etc/rc.d/init.d/functions" | grep -E '/.*/'  
5、统计以root身份登录的每个远程主机IP地址的登录次数
last | grep -o 'root\>.*\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]' | tr -s ' '| cut -d' ' -f3 | uniq -c
v6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
grep  -E  '\<([0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>'
v7、显示ifconfig命令结果中所有IPv4地址
ifconfig | grep -o '\(\([0-9]\|1[0-9]\|1[0-9]{2}\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\([0-9]\|1[0-9]\|1[0-9]{2}\|2[0-4][0-9]\|25[0-5]\)'

 

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

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

相关推荐

  • 软链接和硬链接及两者之间的不同

    在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号…

    Linux干货 2016-12-05
  • Linux 入门(二)

    又一个周的时间过去了,觉得时间过的好快的呢,大概是因为沉迷于学习吧(害羞脸),在这一周里学习了不少东西呢,下面就来总结一下吧 (1)    cp 复制 如果只是单纯的敲cp复制文件而不加任何选项的时候,如果目的目录文件已经存在,就会直接覆盖,而不会出现任何提示信息,而当在实际操作时,就算不加 –i选项,也会提示要不要覆盖文件 原…

    2017-07-22
  • 磁盘管理2——文件系统挂载和swap文件系统以及磁盘管理工具

    文件系统的使用: 首先要“挂载”:mount命令和umount命令 根文件系统之外的其他文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此管理操作即为“挂载”,此目录为“挂载点” 挂载点:MOUNT_POINT,用于作为另一个文件系统的访问入口     (1)事先存在   …

    Linux干货 2016-08-29
  • 实现基于MYSQL验证的vsftpd虚拟用户

    马哥教育面授21期 运维 vsftpd MySQL 说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器 一、安装所需要包和包组: 在数据库服务器上安装包: yum –y install mariadb-server mariadb-devel systemctl start mariad…

    Linux干货 2016-12-21
  • LVM2

    LVM2:         LVM: Logical Volume Manger, Version:2        dm: device mapper, 将一个或多个底层块设备组织 成一个逻辑设备的模块;           &…

    Linux干货 2016-12-30
  • DNS和BIND配置(第二部分)

    接第一部分课后练习 三、课后练习: 2、配置反向解析: 步骤一:写主配置文件:改成与上个实验相同,也可以自己写一个简单的配置文件,如下: [root@localhost tmp]# cat named.conf.new options { directory  "/var/named&qu…

    Linux干货 2016-10-17