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

相关推荐

  • 源码编译安装dropbear

    tar -jxf dropbear-2013.58.tar.bz2 cd dropbear-2013.58 ./configure make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp” make PROGRAMS=”dropbear dbclie…

    Linux干货 2017-10-21
  • keepalived + LVS-NAT 双主互备模型

        实验环境拓扑图:     备注:内网段使用192.168.91.0/24 网段模拟。外网使用192.168.23.0/24网段模拟 1、两节点上关闭防火墙和selinux。 [root@node1 keepalived]# systemctl stop firewalld…

    Linux干货 2016-03-12
  • ps常用命令

    Linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 5. …

    Linux干货 2017-07-02
  • 如何修复Ubuntu 12.04上时间不正确的问题

    大家好: 今天跟大家分享下如何修复ubuntu 12.04上时间不正常的问题。 1–首先打date查看系统的时间是否正常 martell@cnux10:~/sistes/sha-mmb-o2o2o$ date  Thu Dec  1 09:15:47 UTC 2016 martell@cnux10:~/sistes/sha-m…

    Linux干货 2016-12-04
  • LVS 工作模型和调度算法

    简介   LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。 LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡 &nbs…

    Linux干货 2016-12-19
  • Javascript 装载和执行

    一两个月前在淘宝内网里看到一个优化Javascript代码的竞赛,发现有不少的人对Javascript的执行和装载的基础并不懂,所以,从那天起我就想写一篇文章,但一直耽搁了。自上篇《浏览器渲染原理简介》,正好也可以承前启后。 首先,我想说一下Javascript的装载和执行。通常来说,浏览器对于Javascript的运行有两大特性:1)载入后马上执行,2)执…

    Linux干货 2016-08-15