grep用法详解:grep与正则表达式

首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!
正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;

1基础正则表达式

grep 工具,以前介绍过。
grep -[acinv]   '搜索内容串'   filename
-a 以文本文件方式搜索
-c 计算找到的符合行的次数
-i 忽略大小写
-n 顺便输出行号
-v 反向选择,即显示不包含匹配文本的所有行

  1. -h 查询多文件时不显示文件名。-l 查询多文件时只输出包含匹配字符的文件名。-s 不显示不存在或无匹配文本的错误信息。grep命令加- E参数,这一扩展允许使用扩展模式匹配。

其中搜索串可以是正则表达式!

---
先用例子说明问题:
以下为整理的grep 正则表达式的大部分功能,详细参见man
grep: 要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。
$ ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。
$ grep 'test' d* 显示所有以d开头的文件中包含test的行。
$ grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]/{5/}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep 'w/(es/)t.*/1' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(/1),找到就显示该行。如果用egrep或grep -E,就不用"/"号进行转义,直接写成'w(es)t.*/1'就可以了。

grep正则表达式元字符集(基本集)
^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.*一起用代表任意字符。
[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
/(../) 标记匹配字符,如'/(love/)',love被标记为1。
/< 锚定单词的开始,
/> 锚定单词的结束,如'grep/>'匹配包含以grep结尾的单词的行。
x/{m/} 重复字符x,m次,如:'o/{5/}'匹配包含5个o的行。 x/{m,/} 重复字符x,至少m次,如:'o/{5,/}'匹配至少有5个o的行。
x/{m,n/} 重复字符x,至少m次,不多于n次,如:'o/{5,10/}'匹配5--10个o的行。
/w 匹配文字和数字字符,也就是[A-Za-z0-9_],如:'G/w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
/W /w的反置形式,匹配一个或多个非单词字符,如点号句号等。
/b 单词锁定符,如: '/bgrep/
b'只匹配grep。

关于匹配的实例:
grep -c "48" test.txt 统计所有以“48”字符开头的行有多少
grep -i "May" test.txt 不区分大小写查找“May”所有的行)
grep -n "48" test.txt 显示行号;显示匹配字符“48”的行及行号,相同于 nl test.txt |grep 48)
grep -v "48" test.txt 显示输出没有字符“48”所有的行)
grep "471" test.txt 显示输出字符“471”所在的行)
grep "48;" test.txt 显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行
grep "48[34]" test.txt 显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行)
grep "^[^48]" test.txt 显示输出行首不是字符“48”的行)
grep "[Mm]ay" test.txt 设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行)
grep "K…D" test.txt 显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行)
grep "[A-Z][9]D" test.txt 显示输出第一个字符的范围是“A-D”,第二个字符是“9”,第三个字符的是“D”的所有的行
grep "[35]..1998" test.txt 显示第一个字符是3或5,第二三个字符是任意,以1998结尾的所有行
grep "4/{2,/}" test.txt 模式出现几率查找:显示输出字符“4”至少重复出现两次的所有行
grep "9/{3,/}" test.txt 模式出现几率查找:显示输出字符“9”至少重复出现三次的所有行
grep "9/{2,3/}" test.txt 模式出现几率查找:显示输出字符“9”重复出现的次数在一定范围内,重复出现2次或3次所有行
grep -n "^$" test.txt 显示输出空行的行号
ls -l |grep "^d" 如果要查询目录列表中的目录 同:ls -d *
ls -l |grep "^d[d]" 在一个目录中查询不包含目录的所有文件
ls -l |grpe "^d…..x..x" 查询其他用户和用户组成员有可执行权限的目录集合

更多的例子:
1
搜索有the的行,并输出行号
$grep -n 'the' regular_express.txt
搜 索没有the的行,并输出行号
$grep -nv 'the' regular_express.txt

2 利 用[]搜索集合字符
[] 表示其中的某一个字符 ,例如[ade] 表示a或d或e
woody@xiaoc:~/tmp$ grep -n 't[ae]st' regular_express.txt
8:I can't finish the test.
9:Oh! the soup taste good!

可以用^符号做[]内的前缀,表示除[]内的字符之外的字 符。
比如搜索oo前没有g的字符串所在的行. 使用 '[^g]oo' 作搜索字符串
woody@xiaoc:~/tmp$ grep -n '[^g]oo' regular_express.txt
2:apple is my favorite food.
3:Football game is not use feet only.
18:google is the best tools for search keyword.
19:goooooogle yes!

[] 内可以用范围表示,比如[a-z] 表示小写字母,[0-9] 表示0~9的数字, [A-Z] 则是大写字母们。[a-zA-Z0-9]表示所有数字与英文字符。 当然也可以配合^来排除字符。
搜索包含数字的行
woody@xiaoc:~/tmp$ grep -n '[0-9]' regular_express.txt
5:However ,this dress is about $ 3183 dollars.
15:You are the best is menu you are the no.1.

行首与行尾字符 ^ $. ^ 表示行的开头,$表示行的结尾( 不是字符,是位置)那么‘^$’ 就表示空行,因为只有
行首和行尾。

这里^与[]里面使用的^意义不同。它表示^后面的串是在行的开头。
比如搜索the在开头的行
woody@xiaoc:~/tmp$ grep -n '^the' regular_express.txt
12:the symbol '*' is represented as star.

搜索以小写字母开头的行
woody@xiaoc:~/tmp$ grep -n '^[a-z]' regular_express.txt
2:apple is my favorite food.
4:this dress doesn't fit me.
10:motorcycle is cheap than car.
12:the symbol '*' is represented as star.
18:google is the best tools for search keyword.
19:goooooogle yes!
20:go! go! Let's go.
woody@xiaoc:~/tmp$

搜索开头不是英文字母的行
woody@xiaoc:~/tmp$ grep -n '^[^a-zA-Z]' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
21:#I am VBird
woody@xiaoc:~/tmp$

$表示它前面的串是在行的结尾,比如 '/.' 表示 . 在一行的结尾
搜索末尾是.的行
woody@xiaoc:~/tmp$ grep -n '/.$' regular_express.txt //. 是正则表达式的特殊符号,所以要用/转义
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
4:this dress doesn't fit me.
5:However ,this dress is about $ 3183 dollars.
6:GNU is free air not free beer.
.....

注意在MS的系统下生成的文本文件,换行会加上一个 ^M 字符。所以最后的字符会是隐藏的^M ,在处理Windows
下面的文本时要特别注意!
可以用cat dos_file | tr -d '/r' > unix_file 来删除^M符号。 ^M==/r

那么'^$' 就表示只有行首行尾的空行拉!
搜索空行
woody@xiaoc:~/tmp$ grep -n '^$' regular_express.txt
22:
23:
woody@xiaoc:~/tmp$

搜索非空行
woody@xiaoc:~/tmp$ grep -vn '^$' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
4:this dress doesn't fit me.

grep、egrep和fgrep命令--Linux文件内容查询命令

1.命令功能:

grep命令用来在文本文件中查找指定模式的词或短语,并在标准输出上显示包括给定字符串模式的所有行;

egrep命令等同于grep -E,可以使用扩展的字符串模式进行搜索;

fgrep命令等同于grep -F,是快速搜索命令,它检索固定字符串,但不识别正则表达式。

2.一般格式:

  grep [选项] [查找模式] [文件名1,文件名2,……]

     fgrep [选项] [查找模式] [文件名1,文件名2,……]

egrep [选项] [查找模式] [文件名1,文件名2,……]

3.常用选项:

  - E 每个模式作为一个扩展的正则表达式对待。

  - F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。

  - b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。

  - c 只显示匹配行的数量。

  - i 比较时不区分大小写。

  - h 在查找多个文件时,指示grep不要将文件名加入到输出之前。

  - l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。

  - n 在输出前加上匹配串所在行的行号(文件首行行号为1)。

  - v 只显示不包含匹配串的行。

  - x 只显示整行严格匹配的行。

  - e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。

  - f expfile 从expfile文件中获取要搜索的模式,一个模式占一行

4.注意以下方面:

  在命令后键入搜索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如“*”等,用来生成文件名列表。如果想在搜索的模式中包含有空格的字符串,可以用单引号把要搜索的模式括起来,用来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格认为是命令行参数的定界符,而grep命令将把搜索模式中的单词解释为文件名列表中的一部分。在下面的例子中,grep命令在文件example中搜索模式“text file”。

  $ grep ’text file’ example

  用户可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。在下面的例子中,特殊字符“*”用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。

  $ grep data *

   特殊字符在搜索一组指定的文件时非常有用。例如,如果想搜索所有的C程序源文件中特定的模式,您可以用“*.c”来指定文件名列表。假设用户的 C程序中包含一些不必要的转向语句(goto语句),想要找到这些语句,可以用如下的命令来搜索并显示所有包含goto语句的代码行:

  $ grep goto *.c

   用户可以在命令行上键入搜索模式,也可以使用-f选项从指定文件中读取要搜索的模式。在文件中,每个搜索模式占一行。如果经常要搜索一组常见字符串时, 这个功能非常有用。在下面的例子中,用户要在文件exam中搜索字符串“editor”和“create”,就把要搜索的模式放置在文件mypats中, 然后,grep命令从文件mypats中读取要搜索的模式。

  $ cat mypats

  editor

  create

  $ grep -f mypats exam

grep不查找隐藏文件夹的方法

默认的grep会搜索所有文件,包括隐藏文件夹下的文件。

例如,使用如下命令搜索MediaButton字符串,搜索结果包含隐藏文件夹下的文件。

grep -nr MediaButton *

如果是用svn管理的代码,每个文件夹下都有一个.svn的隐藏文件夹,包含对代码版本的控制信息,日积月累会越来越庞大。所有如果只是默认搜索的话,很多搜索结果都是svn目录下的,对我们来说,是没有价值的内容;而且还会耗费很多时间。

grep的--exclude-dir=参数就是为了排除某个目录的,即不包含等号后面的目录,所以我们可以利用此参数去掉.svn的隐藏目录。

--exclude-dir=参数的用法如下:

1. If you have GNU Grep, it should work like this:

  1. ---=".svn"
  2. 例如:查找当前目录以及子目录下所有包含"MediaButton"字符串的代码并打印行号

grep -nr --exclude-dir=".svn" MediaButton *

或者

grep -nr --exclude-dir=\.svn MediaButton *

--exclude-dir=后面要排除的目录用双引号括起来或者直接接目录名都可以,但是特殊字符必须用转义符表示,例如".svn"中的"."。

2.If happen to be on a Unix System without GNU Grep, try the following:

这种方式是使用管道进行双层“过滤”,其中第二次grep使用了-v选项,即逆向匹配,打印出不匹配的行

  1. -"whatever you like"*|-"\.svn/*"
  2. 3. 如果每次都输入--exclude-dir=参数,是不是很慢还容易出错,降低效率呢?

不过不用担心,我们可以把--exclude-dir=参数通过加入配置文件 ~/.bashrc (这是bash的当前用户配置文件) 的方法来简化操作,提高效率。

在~/.bashrc文件的末尾添加以下命令:

export GREP_OPTIONS="--exclude-dir=\.svn"

  1. 然后保存,执行source ~/.bashrc或者. ~/.bashrc,使修改起作用。

然后搜索时,执行以下命令即可:

grep -nr MediaButton *

这样默认就会加载GREP_OPTIONS选项,不搜索.svn目录。

需要注意的是,GREP_OPTIONS这个关键词不能修改为其他的,否则系统就不会认为是grep的一个选项参数了。

grep命令的用法

  1. Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
  2. #2.格式
  3. grep [options]
  4. #3.主要参数
  5. [options]主要参数:
  6. c:只输出匹配行的计数。
  7. I:不区分大 小写(只适用于单字符)。
  8. h:查询多文件时不显示文件名。
  9. l:查询多文件时只输出包含匹配字符的文件名。
  10. n:显示匹配行及 行号。
  11. s:不显示不存在或无匹配文本的错误信息。
  12. v:显示不包含匹配文本的所有行。
  13. pattern正则表达式主要参数:
  14. \: 忽略正则表达式中特殊字符的原有含义。
  15. ^:匹配正则表达式的开始行。
  16. $: 匹配正则表达式的结束行。
  17. \<:从匹配正则表达 式的行开始。
  18. \>:到匹配正则表达式的行结束。
  19. [ ]:单个字符,如[A]即A符合要求
  20. [ - ]:范围,如[A-Z],即ABC一直到Z都符合要求
  21. 。:所有的单个字符。
  22. * :有字符,长度可以为0
  23. #4.grep命令使用简单实例
  24. $ grep test d*
  25. 显示所有以d开头的文件中包含 test的行。
  26. $ grep test aa bb cc
  27. 显示在aabbcc文件中匹配test的行。
  28. $ grep ‘[a-z]\{5\} aa
  29. 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
  30. $ grep w\(es\)t.*\1 aa
  31. 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrepgrep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
  32. #5.grep命令使用复杂实例
  33. 假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:
  34. $ grep magic /usr/src/Linux/Doc/*
  35. sysrq.txt:* How do I enable the magic SysRQ key?
  36. sysrq.txt:* How do I use the magic SysRQ key?
  37. 其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
  38. 默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:
  39. grep: sound: Is a directory
  40. 这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
  41. 明确要求搜索子目录:grep -r
  42. 或忽略子目录:grep -d skip
  43. 如果有很多 输出时,您可以通过管道将其转到’less’上阅读:
  44. $ grep magic /usr/src/Linux/Documentation/* | less
  45.  
  46. 这样,您就可以更方便地阅读。
  47. #有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。
  48. #下面还有一些有意思的命令行参数:
  49. grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
  50. grep -l pattern files :只列出匹配的文件名,
  51. grep -L pattern files :列出不匹配的文件名,
  52. grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
  53. grep -C number pattern files :匹配的上下文分别显示[number]行,
  54. grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
  55. grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
  56. #grep -n pattern files 即可显示行号信息
  57. #grep -c pattern files 即可查找总行数
  58. #这里还有些用于搜索的特殊符号:
  59. \< 和 \> 分别标注单词的开始与结尾。
  60. 例如:
  61. grep man * 会匹配 ‘Batman’、’manic’、’man’等,
  62. grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
  63. grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
  64. ‘^’:指匹配的字符串在行首,
  65. ‘$’:指匹配的字符串在行 尾,
  66.  
  67. #Grep 命令 用法大全
  68. 1、参数:
  69. -I :忽略大小写
  70. -c :打印匹配的行数
  71. -l :从多个文件中查找包含匹配项
  72. -v :查找不包含匹配项的行
  73. -n:打印包含匹配项的行和行标
  74. 2、RE(正则表达式)
  75. \ 忽略正则表达式中特殊字符的原有含义
  76. ^ 匹配正则表达式的开始行
  77. $ 匹配正则表达式的结束行
  78. \< 从匹配正则表达式的行开始
  79. \> 到匹配正则表达式的行结束
  80. [ ] 单个字符;如[A] 即A符合要求
  81. [ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
  82. . 所有的单个字符
  83. * 所有字符,长度可以为0
  84. 3、举例
  85. # ps -ef | grep in.telnetd
  86. root 19955 181 0 13:43:53 ? 0:00 in.telnetd
  87. # more size.txt size文件的内容
  88. b124230
  89. b034325
  90. a081016
  91. m7187998
  92. m7282064
  93.  
  94. a022021
  95.  
  96. a061048
  97.  
  98. m9324822
  99.  
  100. b103303
  101.  
  102. a013386
  103.  
  104. b044525
  105.  
  106. m8987131
  107.  
  108. B081016
  109.  
  110. M45678
  111.  
  112. B103303
  113.  
  114. BADc2345
  115. ## more size.txt | grep '[a-b]' 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
  116.  
  117. b124230
  118.  
  119. b034325
  120.  
  121. a081016
  122.  
  123. a022021
  124.  
  125. a061048
  126.  
  127. b103303
  128.  
  129. a013386
  130.  
  131. b044525
  132.  
  133. # more size.txt | grep '[a-b]'*
  134.  
  135. b124230
  136.  
  137. b034325
  138.  
  139. a081016
  140.  
  141. m7187998
  142.  
  143. m7282064
  144.  
  145. a022021
  146.  
  147. a061048
  148.  
  149. m9324822
  150.  
  151. b103303
  152.  
  153. a013386
  154.  
  155. b044525
  156.  
  157. m8987131
  158.  
  159. B081016
  160.  
  161. M45678
  162.  
  163. B103303
  164.  
  165. BADc2345
  166. ## more size.txt | grep 'b' 单个字符;如[A] 即A符合要求
  167.  
  168. b124230
  169.  
  170. b034325
  171.  
  172. b103303
  173.  
  174. b044525
  175.  
  176. # more size.txt | grep '[bB]'
  177.  
  178. b124230
  179.  
  180. b034325
  181.  
  182. b103303
  183.  
  184. b044525
  185.  
  186. B081016
  187.  
  188. B103303
  189.  
  190. BADc2345
  191. ## grep 'root' /etc/group
  192.  
  193. root::0:root
  194.  
  195. bin::2:root,bin,daemon
  196.  
  197. sys::3:root,bin,sys,adm
  198.  
  199. adm::4:root,adm,daemon
  200.  
  201. uucp::5:root,uucp
  202.  
  203. mail::6:root
  204.  
  205. tty::7:root,tty,adm
  206.  
  207. lp::8:root,lp,adm
  208.  
  209. nuucp::9:root,nuucp
  210.  
  211. daemon::12:root,daemon
  212. ## grep '^root' /etc/group 匹配正则表达式的开始行
  213.  
  214. root::0:root
  215. ## grep 'uucp' /etc/group
  216.  
  217. uucp::5:root,uucp
  218.  
  219. nuucp::9:root,nuucp
  220. ## grep '\<uucp' /etc/group#
  221.  
  222. uucp::5:root,uucp
  223. ## grep 'root$' /etc/group 匹配正则表达式的结束行
  224.  
  225. root::0:root
  226.  
  227. mail::6:root
  228. ## more size.txt | grep -i 'b1..*3' -i :忽略大小写
  229. #b124230
  230.  
  231. b103303
  232.  
  233. B103303
  234. ## more size.txt | grep -iv 'b1..*3' -v :查找不包含匹配项的行
  235. #b034325
  236.  
  237. a081016
  238.  
  239. m7187998
  240.  
  241. m7282064
  242.  
  243. a022021
  244.  
  245. a061048
  246.  
  247. m9324822
  248.  
  249. a013386
  250.  
  251. b044525
  252.  
  253. m8987131
  254.  
  255. B081016
  256.  
  257. M45678
  258.  
  259. BADc2345
  260. ## more size.txt | grep -in 'b1..*3'
  261.  
  262. 1:b124230
  263.  
  264. 9:b103303
  265.  
  266. 15:B103303
  267. ## grep '$' /etc/init.d/nfs.server | wc -l
  268.  
  269. 128
  270.  
  271. # grep '\$' /etc/init.d/nfs.server | wc –l 忽略正则表达式中特殊字符的原有含义
  272. #15
  273.  
  274. # grep '\$' /etc/init.d/nfs.server
  275.  
  276. case "$1" in
  277.  
  278. >/tmp/sharetab.$$
  279.  
  280. [ "x$fstype" != xnfs ] &&
  281.  
  282. echo "$path\t$res\t$fstype\t$opts\t$desc"
  283.  
  284. >>/tmp/sharetab.$$
  285.  
  286. /usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$
  287.  
  288. /usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
  289.  
  290. if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)'
  291.  
  292. if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] &&
  293.  
  294. if [ $startnfsd -ne 0 ]; then
  295.  
  296. elif [ ! -n "$_INIT_RUN_LEVEL" ]; then
  297.  
  298. while [ $wtime -gt 0 ]; do
  299.  
  300. wtime=`expr $wtime - 1`
  301.  
  302. if [ $wtime -eq 0 ]; then
  303.  
  304. echo "Usage: $0 { start | stop }"
  305. ## more size.txt
  306. #the test file
  307.  
  308. their are files
  309.  
  310. The end
  311. ## grep 'the' size.txt
  312.  
  313. the test file
  314.  
  315. their are files
  316. ## grep '\<the' size.txt
  317.  
  318. the test file
  319.  
  320. their are files
  321. ## grep 'the\>' size.txt
  322.  
  323. the test file
  324. ## grep '\<the\>' size.txt
  325.  
  326. the test file
  327. ## grep '\<[Tt]he\>' size.txt
  328. the test file
  329.  
  330. #==================================================================
  331. #1,简介
  332. 使用正则表达式的一个多用途文本搜索工具.这个php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">命令本来是ed行编辑器中的一个php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">命令/过滤器:
  333. g/re/p -- global - regular expression - print.
  334. 基本格式
  335. grep pattern [file...]
  336. (1)grep 搜索字符串 [filename]
  337. (2)grep 正则表达式 [filename]
  338. 在文件中搜索所有 pattern 出现的位置, pattern 既可以是要搜索的字符串,也可以是一个正则表达式.
  339. 注意:在输入要搜索的字符串时最好使用双引号/而在模式匹配使用正则表达式时,注意使用单引号
  340. 2,grep的选项
  341. -c 只输出匹配行的计数
  342. -i 不区分大小写(用于单字符)
  343. -n 显示匹配的行号
  344. -v 不显示不包含匹配文本的所以有行
  345. -s 不显示错误信息
  346. -E 使用扩展正则表达式
  347. 更多的选项请查看:man grep
  348. 3,常用grep实例
  349. #(1)多个文件查询
  350. grep "sort" *.doc #见文件名的匹配
  351. (2)行匹配:输出匹配行的计数
  352. grep -c "48" data.doc #输出文档中含有48字符的行数
  353. (3)显示匹配行和行数
  354. grep -n "48" data.doc #显示所有匹配48的行和行号
  355. (4)显示非匹配的行
  356. grep -vn "48" data.doc #输出所有不#包含48的行
  357. (4)显示非匹配的行
  358. grep -vn "48" data.doc #输出所有不包含48的行
  359. (5)大小写敏感
  360. grep -i "ab" data.doc #输出所有含有ab或Ab的字符串的行
  361. 4, 正则表达式的应用
  362. (1)正则表达式的应用 (注意:最好把正则表达式用单引号括起来)
  363. grep '[239].' data.doc #输出所有含有以2,3或9开头的,并且是两个数字的行
  364. (2)不匹配测试
  365. grep '^[^48]' data.doc #不匹配行首是48的行
  366. (3)使用扩展模式匹配
  367. grep -E '219|216' data.doc
  368. (4) ...
  369. 这需要在实践中不断应用和总结,熟练掌握正则表达式。
  370. 5, 使用类名
  371. 可以使用国际模式匹配的类名:
  372. [[:upper:]] [A-Z]
  373. [[:lower:]] [a-z]
  374. [[:digit:]] [0-9]
  375. [[:alnum:]] [0-9a-zA-Z]
  376. [[:space:]] 空格或tab
  377. [[:alpha:]] [a-zA-Z]
  378. (1)使用
  379. grep '5[[:upper:]][[:upper:]]' data.doc #查询以5开头以两个大写字母结尾的行

grep与正则表达式,grep、egrep和fgrep的更多相关文章

  1. Linux的正则表达式grep,egrep

    一.概念 正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一组特殊字符,组成一个"规则字符集合",根据用户指定的文本模式对目标文件进行逐行搜索匹配,显示能被模式匹配到的结果. ...

  2. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  3. grep及正则表达式

    文本搜索工具:grep,egrep,fgrep GREP介绍 grep: 根据模式条件搜索文本,并将符合模式的文本行显示出来.  过滤条件:文本字符和正则表达式的元字符组合而成匹配条件 以正则表达式的 ...

  4. Linux之grep及正则表达式

    grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的g ...

  5. grep与正则表达式基础

    目录 grep 正则表达式 grep用法简介 我们介绍GREP的用法,主要用于匹配行,我们借助下面的正则表达式来介绍如何使用grep,还有就是正则表达式在linux中是极为重要的一部分. 命令:gre ...

  6. [Linux 006]——grep和正则表达式

    在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配, ...

  7. SHELL —— grep命令+正则表达式

    一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 生活中处处都是正则: 比如我们描述:4条腿 你可能会想 ...

  8. grep与正则表达式使用

    grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的g ...

  9. grep用法详解:grep与正则表达式【转】

    转自:http://blog.csdn.net/hellochenlian/article/details/34088179 grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配 ...

随机推荐

  1. poj 1990

    题目链接 借鉴cxlove大神的思路 题意:听力v,位置x,2个牛交流声音为max(v1,v2)*(x1-x2),求总的 10000^2 tle 用的树状数组做的,排序,2个,小于vi的牛的总数和距离 ...

  2. container_of用法及实现

    container_of 有的情况下,只知道 struct结构中莫个成员的指针,而需要知道整个struct的指针 (如网卡驱动里面,list) struct DDD {         int a; ...

  3. Linux 软件源设置

    版本号:1.0.0-beta 作者:石硕 更新:2014-04-30 15:51:40 ======================================================== ...

  4. Swift UI开发初探

    今天凌晨Apple刚刚发布了Swift编程语言,Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言. 废话不多说,下面我就来学习使用Swift创建一个简单的UI应用程 ...

  5. 查询PO的预付款剩余金额

    FUNCTION zrfc_mm016. *"---------------------------------------------------------------------- * ...

  6. ASP.NET Core Authorization

    ASP.NET Core Authorization 本文目录 Asp.net Core 对于授权的改动很友好,非常的灵活,本文以MVC为主,当然如果说webapi或者其他的分布式解决方案授权,也容易 ...

  7. 终于实现samba可写不可删除

    通过szxsztszk的提示 今天终于实现了linux可写不可删除的要求. 同时运用了POSIX ACL 我们公司的要求是这样的[color=Red](我只做出我公司要求的步骤,不同的要求,稍加改正即 ...

  8. properties 文件的中文转ASCII

     在软件开发过程中,经常要涉及到多语言支持问题,常用的解决方案是将各个语言文字放到properties文件中,但中文是需要转为ASCII的 .那么如何将中文进行转换呢,下面就为你列举几种比较方便的方法 ...

  9. JSP页面小脚本实现日期比較,Java同理,精简过后的,可能在效率上不太好,有大大能够给优化下就更好了

    <%         java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd ...

  10. URAL 1180. Stone Game (博弈 + 规律)

    1180. Stone Game Time limit: 1.0 second Memory limit: 64 MB Two Nikifors play a funny game. There is ...