码迷,mamicode.com
首页 > 其他好文 > 详细

正则、grep

时间:2018-01-16 01:03:34      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:daemon   串行   /etc   grep   sbin   检索   opera   字符串   pass   

正则

正则表达式,又称为规律表达式。用来进行字符串操作,通常用来检索、替换那些符合某个模式(规则)的文本;
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑;

  • grep/egrep
  • sed
  • awk

grep

格式:
grep [-cinvABC] ‘word‘ filename

  • -c 统计行数
    grep -c ‘not’ passwd
    统计passwd 中有多少行‘not’

    [root@shu-test grep]# ls
    passwd
    [root@shu-test grep]# grep -c ‘not‘ passwd
    0
    [root@shu-test grep]# grep -c ‘root‘ passwd
    2
    [root@shu-test grep]#
  • -i 不区分大小写

grep -i ‘not’ passwd
将passwd中的not不区分大小写的行打印出来

[root@shu-test grep]# grep -i ‘root‘ passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@shu-test grep]# grep -i ‘Root‘ passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@shu-test grep]#
  • -n 显示行号

grep -n ‘root’ passwd
输出passwd中的符合root要求的行和行号

[root@shu-test grep]# grep -n ‘root‘ passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@shu-test grep]#
  • -v 表示打印不符合要求的行(取反)
    grep -v ‘sbin’ passwd
    将passwd中不是sbin的行都打印出来
    [root@shu-test grep]# grep -v ‘sbin‘ passwd
    root:x:0:0:root:/root:/bin/bash
    user01:x:1000:1000::/home/user01:/bin/bash
    [root@shu-test grep]#

    -A 后面跟一数字,-A2表示打印符合要求的行以及下两行

grep -A2 ‘root’ passwd
表示打印符合要求的行以及下两行

[root@shu-test grep]# grep -A2 ‘root‘ passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@shu-test grep]#

-B 后面跟-数字,-B2表示打印符合要求的行以及上面两行
grep -B2 ‘root‘ passwd

[root@shu-test grep]# grep -B2 ‘root‘ passwd
root:x:0:0:root:/root:/bin/bash
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@shu-test grep]#

-C 后面跟一数字,-C2表示打印符合要求的上下各两行,符合条件1行+上下两行=5行

[root@shu-test grep]# grep -C1 ‘root‘ passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
--
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[root@shu-test grep]#

grep实用

  • 过滤所有包含数字的行
grep [0-9] passwd
将passwd中包含数字0-9的行打印出来
  • 过滤出所有不包含数字的行
    grep -v ‘[0-9]‘ passwd

  • 过滤掉所有以#开头的行,将开头不是#的行打印出来;

    grep -v ‘^#‘ /etc/sos.conf
    开头中一般^为隐藏开头
  • 过滤所有空行与以#开头的行

    grep -v ‘^#‘ /etc/sos.conf |grep -v ‘^$‘
    中间$代表隐藏结束行尾 ^为隐藏行头 ^$代表空行
  • 过滤出任意一个字符

    grep ‘r.o’ passwd
    将passwd文件中的 r+任意一个字符+o 的三字节字符串行打印出来
    其中字符.表示任意一个字符 字符*表示任意多个字符
    o*o  o*表示0-无限个o  那么o*o表示一个或多个o
  • 指定过滤字符出现次数
grep ‘o\{2\}‘ passwd
过滤出哦出现两次也就是oo 
中间{}花括号表示范围  而o{2}则会过滤字符串o{2}出来 而不是oo 所以中间加一个脱义符\
  • 过滤出一个或多个指定的字符
egrep ‘o+‘ passwd
过滤出一个或一个以上的O
egrep ‘o+o‘ passwd
两个o
  • 过滤出零个或一个指定字符
egrep ‘o?‘ passwd
?代表o到1个任意字符
  • 过滤字符串1或者字符串2
egrep ‘aaa|111|ooo‘ passwd
过滤 aaa  与111 与ooo 的行打印出来
  • egrep中()的应用
egrep ‘r(oo|at)o‘ passwd
过滤 roo以及ato 的行打印出来
egrep ‘(oo)+‘ passwd
过滤出一个或多个以上o的行打印出来

正则、grep

标签:daemon   串行   /etc   grep   sbin   检索   opera   字符串   pass   

原文地址:http://blog.51cto.com/shuzonglu/2061326

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!