grep与正则表达式

grep与正则表达式

grep

使用语法:grep [-abcEFGhHilLnqrsvVwxy][-C<显示列数>][-e<范本样式>][-f<范本文件>][范本样式][文件或目录...] 

功能说明:查找指定文件或标准输入里符合条件的字符串 
常用选项

-a 或–text 不要忽略二进制的数据。 
-A<显示列数>或–after-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之后的内容。 
-b 或–byte-offset 在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。

1.[root - gwx-st ~/test]#>grep -A1 -B1 -b "^bin" passwd 
2.0-root:x:0:0:root:/root:/bin/bash
3.32:bin:x:1:1:bin:/bin:/sbin/nologin
4.65-daemon:x:2:2:daemon:/sbin:/sbin/nologin

-B<显示列数>或–before-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前的内容。

1.[root - gwx-st ~/test]#>head -3 passwd 
2.root:x:0:0:root:/root:/bin/bash
3.bin:x:1:1:bin:/bin:/sbin/nologin
4.daemon:x:2:2:daemon:/sbin:/sbin/nologin
5.[root - gwx-st ~/test]#>grep -A1 -B1 "^bin" passwd
6.root:x:0:0:root:/root:/bin/bash
7.bin:x:1:1:bin:/bin:/sbin/nologin
8.daemon:x:2:2:daemon:/sbin:/sbin/nologin

-c 或–count 计算符合范本样式的列数。

1.[root - gwx-st ~/test]#>grep -c "^bin" passwd 
2.1
3.[root - gwx-st ~/test]#>grep  "^bin" passwd
4.bin:x:1:1:bin:/bin:/sbin/nologin

-C<显示列数>或–context=<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。

1.[root - gwx-st ~/test]#>grep -C1 "^bin" passwd 
2.root:x:0:0:root:/root:/bin/bash
3.bin:x:1:1:bin:/bin:/sbin/nologin
4.daemon:x:2:2:daemon:/sbin:/sbin/nologin

-d<进行动作>或–directories=<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则 grep 指令将回报信息并停止动作。 
-e<范本样式>或–regexp=<范本样式> 指定字符串做为查找文件内容的范本样式。 
-E 或–extended-regexp 将范本样式为扩展正则表达式来使用。

1.[root - gwx-st ~/test]#>grep "^ro+t" passwd 
2.[root - gwx-st ~/test]#>grep -E "^ro+t" passwd
3.root:x:0:0:root:/root:/bin/bash
4.[root - gwx-st ~/test]#>grep "^ro\+t" passwd
5.root:x:0:0:root:/root:/bin/bash

-f<范本文件>或–file=<范本文件> 指定范本文件,其内容含有一个或多个范本样式,让grep 查找符合范本条件的文件内容,格式为每列一个范本样式。

1.[root - gwx-st ~/test]#>cat username.list
2.root
3.gwx
4.test
5.[root - gwx-st ~/test]#>grep -f username.list passwd
6.root:x:0:0:root:/root:/bin/bash
7.operator:x:11:0:operator:/root:/sbin/nologin
8.gwx:x:1000:1000:gwx:/home/gwx:/bin/bash
9.test1:x:1012:1012::/home/test1:/bin/bash
10.test2:x:1013:1013::/home/test2:/bin/bash

-F 或–fixed-regexp 将范本样式视为固定字符串的列表。即不适用正则表达式。

1.[root - gwx-st ~/test]#>grep "^bin" passwd 
2.bin:x:1:1:bin:/bin:/sbin/nologin
3.[root - gwx-st ~/test]#>grep -F "^bin" passwd
4.[root - gwx-st ~/test]#>

-G 或–basic-regexp 将范本样式视为正则表达式来使用。默认使用的基本正则表达式。 
-h 或–no-filename 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。默认选项。 
-H 或–with-filename 在显示符合范本样式的那一列之前,标示该列所属的文件名称。

1.[root - gwx-st ~/test]#>grep -H "^gwx" passwd 
2.passwd:gwx:x:1000:1000:gwx:/home/gwx:/bin/bash

-i 或–ignore-case 忽略字符大小写的差别。

1.[root - gwx-st ~/test]#>grep -i "^GWX" passwd 
2.gwx:x:1000:1000:gwx:/home/gwx:/bin/bash

-l 或–file-with-matches 列出文件内容符合指定的范本样式的文件名称。

1.[root - gwx-st /]#>grep -r -l "root.*" ~/test/
2./root/test/passwd
3./root/test/username.list

-L 或–files-without-match 列出文件内容不符合指定的范本样式的文件名称。

1.[root - gwx-st /]#>grep -r -L "root.*" ~/test/
2./root/test/test1
3./root/test/test2

-n 或–line-number 在显示符合范本样式的那一列之前,标示出该列的列数编号。

1.[root - gwx-st ~/test]#>grep -n "^gwx" passwd 
2.22:gwx:x:1000:1000:gwx:/home/gwx:/bin/bash

-q 或–quiet 或–silent 不显示任何信息。 
-r 或–recursive 此参数的效果和指定“-d recurse”参数相同。

1.[root - gwx-st /]#>grep -r "root.*" ~/test/
2./root/test/passwd:root:x:0:0:root:/root:/bin/bash
3./root/test/passwd:operator:x:11:0:operator:/root:/sbin/nologin
4./root/test/username.list:root

-s 或–no-messages 不显示错误信息。

1.[root - gwx-st /]#>grep  -L "root.*" ~/test/
2.grep: /root/test/: Is a directory
3./root/test/
4.[root - gwx-st /]#>grep  -L -s "root.*" ~/test/
5./root/test/

-v 或–revert-match 反转查找。

1.[root - gwx-st ~/test]#>cat test2
2.ad
3.ag
4.ga
5.[root - gwx-st ~/test]#>grep -v "^a" test2
6.ga

-V 或–version 显示版本信息。 
-w 或–word-regexp 只显示全字符合的列。 
-x 或–line-regexp 只显示全列符合的列。 
-y 此参数的效果和指定“-i”参数相同。 
-o 只显示与范本样式匹配的字符串

1.[root - gwx-st ~/test]#>grep -o "^a" test2
2.a
3.a
4.[root - gwx-st ~/test]#>grep  "^a" test2
5.ad
6.ag

正则表达式

    正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。此处的*为通配符。 
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。 
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为”元字符”)组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 
下面我们来看一下正则表达式所支持的常用元字符

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,’n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\\’ 匹配 “\” 而 “\(” 则匹配 “(“。
^ 匹配输入字符串的开始位置。
$ 匹配输入字符串的结束位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 “oooo”,’o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,如需引用则使用 \1…。要匹配圆括号字符,请使用 ‘\(’ 或 ‘\)’。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符(|)来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
x|y 匹配 x 或 y。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’、’l’、’i’、’n’。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,’[^a-z]’ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\< 匹配一个单词的词首
> 匹配一个单词的词尾
\B 匹配非单词边界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。

   好了,接下来让我们实践一下吧~~

显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。

1.[root - gwx-st ~/test]#>ls /var |grep -E "^l.*[[:digit:]]+.*[[:lower:]]$"
2.l1b
3.ll2a2iii3d

显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。

1.[root - gwx-st ~/test]#>ls /etc/ |grep  "^[0-9].*[^0-9]$"
2.1agasga21dad

显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。

1.[root - gwx-st ~/test]#>ls /etc/ |grep -E "^[^[:alpha:]][[:alpha:]]+.*"
2.1agasga21dad

复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

1.[root - gwx-st ~/test]#>cp -rf /etc/p*[^0-9] /tmp/mytest1

复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。

1.[root - gwx-st ~/test]#>cp -rf /etc/*.d  /tmp/mytest2

复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

1.[root - gwx-st ~/test]#>cp -rf /etc/[lmn]*.conf /tmp/mytest3

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

(0)
N24-wenxuanN24-wenxuan
上一篇 2016-11-05 12:45
下一篇 2016-11-05 16:51

相关推荐

  • 第一周学习总结

    俗话说,好记性不如烂笔头,在当今移动互联网横行的时代,烂笔头就是网络,而笔记本就是各种平台。 作为一个IT人,有人突然问你计算机是啥,你可能不会像学文科的人一样给他说,就是电脑啊。这时候就是凸显IT知识技能的时候了,那么我下面就给您慢慢的道来。 在1946年美籍匈牙利人冯·诺依曼首次提出了自己的计算机体系理论,简称冯·诺依曼体系,主要是说计算机由五大基本部件…

    2017-12-14
  • DNS服务器之理论基础

    一、什么是DNS     DNS全称为Domain Name System,即域名系统,其作用就是将我们经常使用的“网址”解析为IP地址。     在互联网上通信需要借助于IP地址,但人类对于数字的记忆能力远不如文字,那么将IP地址转换成容易记忆的文字是个好办法,可是计算机只能识…

    Linux干货 2015-04-29
  • 正则表达式***(Regular Experssion)

    正则表达式 正则表达式缩写为regex、regexp、RE等。他是文本处理极为重要的技术,其应用非常广泛,shell中处理文本的命令、各种高级编程语言都支持正则表达式,用它可以对字符串按照某种规则进行检索和替换, 分类 BRE:基本正则,grep、sed、vi等软件支持。vim支持扩展正则 ERE:扩展正则,egrep(grep -E)、sed -r等。 P…

    Linux干货 2017-11-05
  • Memcached实现Tomcat的session会话绑定

    memcached介绍:  Memcached是一个高性能的分布式内存对称缓存系统;通过缓存查询数据库结果,介绍数据库访问次数,以提高web应用的速度、提高扩展性。  Memcached特点:   协议简单   基于libevent的事件处理   内置内存存储方式  memcached不互相通信的分…

    Linux干货 2015-08-01
  • PHP通过Thrift操作Hbase

    HBase是一个开源的NoSQL产品,它是实现了Google BigTable论文的一个开源产品,和Hadoop和HDFS一起,可用来存储和处理海量column family的数据。官方网址是:http://hbase.apache.org 一 、HBase访问接口 1.  Native Java API,最常规和高效的访问方式,适合Hadoop …

    Linux干货 2015-05-18
  • 开始学习Linux的一些建议

    建议读者范围 有开发经验者。 科研人员(由其Numrical)。 动手能力强的。 只是好奇,对于Linux只是浅尝辄止的就不建议继续往下看了。 端正学习态度 Linux不等于骇客(or Cracker)。 当然众所周知很多“黑客工具”都是Linux平台上的,我帮助过很多Linux小白发现他们殊途同归都是朝着类似Aircrack-ng去的。 但他们不知道的是:…

    Linux干货 2015-02-26

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-10 17:17

    赞,grep 总结的比较详细~~排版也比较好~继续加油~