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)
上一篇 2016-08-07 22:07
下一篇 2016-08-07 22:07

相关推荐

  • 7月19号:计算机基础+在VMware12中安装CentOS6.8

        16号从正下暴雨的武汉来到帝都参加马哥培训班,从清河公寓亮哥开始,到宿舍另外五位室友,渐渐认识更多人,还算适应额不错。但走在北京的马路上,多少还是有些陌生,不过就如宿舍一样,来的时候脏兮兮,经过一番打扫后,干净了不少,我也会很快习惯在这边的生活,精力全放在linux上!   &nb…

    Linux干货 2016-08-05
  • iptables/netfilter网络防火墙:

    iptables/netfilter网络防火墙: FORWORD链上的防火墙规则 路由功能打开[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 网关设置防火墙,让内网可以访问外网网页 iptables -A FORWARD -s 192.168.126.131 -p tcp –dpo…

    2016-10-26
  • 8-5作业

    1、取本机ip地址 ifconfig |grep -E -o  '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' 2、取各分区利…

    Linux干货 2016-08-08
  • Linux文件和目录管理

    Linux目录和文件管理 Linux文件信息详述 文件数据存储在块中 文件元数据存储在inode中 文件名和其对应的inode号码存储在目录项中 数据块的概念: 文件在硬盘上的最小存储单位叫做扇区,1扇区=512字节,操作系统读取硬盘的时候不会一个一个读,这样太慢,会一次连续读多个扇区,即一个读取一个“块”,常见的 1块=八个扇区=4kB inode的概念:…

    Linux干货 2016-11-04
  • 如何修复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
  • keepalived

    简介:     vrrp, virtual routing redundant protocol, 虚拟路由协议, 是为了解决局域网中配置静态网关出现单点失败现象的路由协议; 设计目标时是支持特定情况下IP数据流量失败转移不会引起混乱, 允许主机使用单路由器, 以及及时在实际第一跳路由器使用失败的情形下, 仍然能够维护…

    Linux干货 2016-11-11