正则表达式(grep)元字符及模式匹配的介绍及sed高级应用选项

前端之家收集整理的这篇文章主要介绍了正则表达式(grep)元字符及模式匹配的介绍及sed高级应用选项前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

当要查看文本中特定字符的时候,我们会经常用到GREP、SED、AWK,今天我们一起来学习下LINUX中的文本过滤工具GREP和SED的基本使用

 
 
  1. @H_403_25@
  2. @H_403_25@
  3. @H_403_25@
  4. 正则表达式: @H_403_25@
  5. 定义: @H_403_25@
  6. 是一些字符或是特殊字符串模式的集合。 @H_403_25@
  7. 功能:根据模式搜索文本,并将符合模式的文本行显示出来。 @H_403_25@
  8. Pattern(模式): @H_403_25@
  9. 文本字符和正则表达式的元字符组合而成匹配条件 @H_403_25@
  10. grep: @H_403_25@
  11. @H_403_25@
  12. @H_403_25@
  13. grep简介 @H_403_25@
  14. grep(globalsearchregularRE)< /span>andprintouttheline,全面搜索正则表达式并把行打印出来 @H_403_25@
  15. 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 @H_403_25@
  16. Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。 @H_403_25@
  17. egrep是grep的扩展,支持更多的RE元字符,fgrep就是fixedgrep或fastgrep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符 @H_403_25@
  18. 表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能@H_403_25@
  19. @H_403_25@
  20. grep是很常见也很常用的命令,它最重要的功能就是进行字符串数据的比较,然后将符合用户要求的字符串显示出来。 @H_403_25@
  21. 在这里需要说明的是,grep在数据中查找一个字符串时,是以”整行“为单位来进行数据选取的。也就是说,假如一个文件内有10行,其中有两行具有 @H_403_25@
  22. 搜索的字符串,则将那两行显示在屏幕上,其它则丢去。 @H_403_25@
  23. 注:默认情况下正则表达式工作在贪婪模式下 @H_403_25@
  24. grep[options]PATTERN[FILE...] @H_403_25@
  25. -a:在二进制文件夹中,以文本文件的方式搜索数据。 @H_403_25@
  26. -i:忽略大小写 @H_403_25@
  27. --color:将匹配的字符串以颜色基于现实 @H_403_25@
  28. -v:反向查询,即显示出没有被‘搜索字符串’内容的哪一行 @H_403_25@
  29. -o:只显示被模式匹配的字符串 @H_403_25@
  30. grep-o'root'/etc/passwd @H_403_25@
  31. root @H_403_25@
  32. .... @H_403_25@
  33. -n:输出行号 @H_403_25@
  34. -c:计算找到‘搜索字符串’的次数 @H_403_25@
  35. -A:#匹配结果并将匹配结果的后#行一并显示 @H_403_25@
  36. -B:#匹配结果并将匹配结果的前#行一并显示 @H_403_25@
  37. -C:Aandb显示匹配结果前和后各几行。 @H_403_25@
  38. 正则表达式就是里面有一些元字符,这些字符不表示它本身的意思,而表示通配的意义。 @H_403_25@
  39. @H_403_25@
  40. 介绍grep进行文件搜索时所用到的云字符并加以介绍 @H_403_25@
  41. @H_403_25@
  42. 搜索特定字符串、利用[]来搜索集合字符、任意一个字符(.)与重复字符(*)、 @H_403_25@
  43. 行首与行尾字符^$、限定连接重复字符范围{}、位置锚定、组 @H_403_25@
  44. @H_403_25@
  45. 下面我们就来一起学习元字符的含义: @H_403_25@
  46. ^:锚定行首 @H_403_25@
  47. 例如: @H_403_25@
  48. '^root':表示以root作为行首进行查找 @H_403_25@
  49. $:锚定行尾 @H_403_25@
  50. 例如: @H_403_25@
  51. 'nologin$':表示查找以nologin结尾所匹配的行 @H_403_25@
  52. .:匹配任意单个字符 @H_403_25@
  53. 例如: @H_403_25@
  54. 'r..t':表示查找以r开头,t结尾并且中间存在两个字符匹配的行 @H_403_25@
  55. *:一个单字符后紧跟*,匹配0个或多个此单字符 @H_403_25@
  56. 例如: @H_403_25@
  57. 'ok*':表示以o为开头后面可以没有k个字符,也可以出现多次 @H_403_25@
  58. .*:任意字符 @H_403_25@
  59. 例如: @H_403_25@
  60. 'root.*':表示查找以root开头后面跟任意字符所匹配的行 @H_403_25@
  61. []:匹配[]内字符序列范围 @H_403_25@
  62. 例如: @H_403_25@
  63. '[a-z]'表示匹配[]任意一个小写字母 @H_403_25@
  64. [^]:匹配[]内以外的字符串 @H_403_25@
  65. 例如: @H_403_25@
  66. '[^root]':表示除root以外的行 @H_403_25@
  67. ^$:显示空白行 @H_403_25@
  68. 例如: @H_403_25@
  69. '^$':表示以空白行作为模式并显示匹配的行 @H_403_25@
  70. \<:其后面的任意string必须作为单词首部出现 @H_403_25@
  71. 例如: @H_403_25@
  72. '\<root':表示查找以root作为模式而且必须出现在行首 @H_403_25@
  73. \>:其前面的任意string必须作为单词尾部出现 @H_403_25@
  74. 例如: @H_403_25@
  75. 'nologin\>':表示查找以root作为模式而且必须出现在行尾 @H_403_25@
  76. \<sting\>:以string为整体并进行对文本文件进行查找 @H_403_25@
  77. 例如: @H_403_25@
  78. '\<root\>':表示以root为单词并进行搜索 @H_403_25@
  79. \(\):分组 @H_403_25@
  80. 例如: @H_403_25@
  81. \(ab\)*:把ab当作整体,ab可以出现0次,1次,或多次 @H_403_25@
  82. \(\)\1:引用第一个左括号以及与之对应的右括号所包括的所有内容 @H_403_25@
  83. \2: @H_403_25@
  84. \3: @H_403_25@
  85. 例如: @H_403_25@
  86. \(ab\)\1:表示以ab为以个整体显示,并引用前面ab字符串显示出来 @H_403_25@
  87. @H_403_25@
  88. \:用来注释一个元字符的特殊含义。因为有在shell中一些元字符有特殊含义。 @H_403_25@
  89. 例如: @H_403_25@
  90. '\/'表示查找以'/'作为模式进行查找 @H_403_25@
  91. pattern\{m\}:用来匹配前面pattern出现n次 @H_403_25@
  92. 例如: @H_403_25@
  93. 'root\{2\}:表示匹配root字符串而且必须出现2次 @H_403_25@
  94. pattern\{m,\}:用来匹配前面pattern至少m次,多则不限 @H_403_25@
  95. 例如:'root\{1,\}:表示至少出现1次root,多则不限 @H_403_25@
  96. pattern\{m,n\}:用来匹配前面pattern至少m次,至多n次 @H_403_25@
  97. 例如: @H_403_25@
  98. 'root\{1,2\}:表示至少出现1次root,至多2次 @H_403_25@
  99. @H_403_25@
  100. @H_403_25@
  101. EGREP: @H_403_25@
  102. egrep和grep-E的元字符扩展集 @H_403_25@
  103. +:匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。 @H_403_25@
  104. ?:匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。 @H_403_25@
  105. a|b|c:匹配a或b或c。如:grep|sed匹配grep或sed @H_403_25@
  106. ():分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。 @H_403_25@
  107. x{m},x{m,},n}:作用同x\{m\},x\{m,\},n\} @H_403_25@
  108. @H_403_25@
  109. POSIX字符类: @H_403_25@
  110. @H_403_25@
  111. [[:space:]]:所有空格字符 @H_403_25@
  112. [[:punct:]]:标点符号 @H_403_25@
  113. [[:lower:]]:小写字母 @H_403_25@
  114. [[:upper:]]:大写字母 @H_403_25@
  115. [[:digit:]]:数字 @H_403_25@
  116. [[:alnum:]]:数字和大小写字母 @H_403_25@
  117. @H_403_25@
  118. @H_403_25@
  119. sed基本用法@H_403_25@
  120. @H_403_25@
  121. sed(StreamEDitor):它是一种流编辑器 @H_403_25@
  122. sed:文本编辑器,而不是字处理器,只是操作纯ASCII码文本的,其次它在操作文本的时候,是按行进行的,逐行进行。 @H_403_25@
  123. sed的主要功能是实现逐行处理文本的,所以我们称它为行编辑器。 @H_403_25@
  124. @H_403_25@
  125. sed的处理机制: @H_403_25@
  126. 每当处理一个文本文件时,它不会直接编辑文本文件的本身,而是将文本文件内容逐行读取到内存空间里,而后在内存空间里完成编辑工作,随后将编辑出的结 @H_403_25@
  127. 果以标准输出显示到屏幕上。 @H_403_25@
  128. 我们称这个内存空间成为模式空间。 @H_403_25@
  129. @H_403_25@
  130. sed:模式空间 @H_403_25@
  131. 默认不编辑原文本文件本身,仅对模式空间中的数据做处理;而后将处理结束后,将模式空间打印至屏幕。 @H_403_25@
  132. @H_403_25@
  133. @H_403_25@
  134. sed[options]'AddressCommand'file... @H_403_25@
  135. -n:静默模式,不再默认显示模式空间中的内容,只显示符合条件的行。 @H_403_25@
  136. -i:直接修改文件 @H_403_25@
  137. -eSCRIPT-eSCRIPT:可以同时执行多个脚本 @H_403_25@
  138. -f/PATH/TO/SED_SCRIPT @H_403_25@
  139. sed-f/path/to/scriptsfile @H_403_25@
  140. -r:表示使用扩展正则表达式 @H_403_25@
  141. @H_403_25@
  142. Address: @H_403_25@
  143. 1、StartLine,EndLine @H_403_25@
  144. 比如1,10,表示第一行到第10行 @H_403_25@
  145. $:表示最后一行 @H_403_25@
  146. $-1:表示倒数第二行 @H_403_25@
  147. 2、/RegExp/:支持正则表达式 @H_403_25@
  148. /^root/ @H_403_25@
  149. 3、/pattern1/,/pattern2/ @H_403_25@
  150. 第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行 @H_403_25@
  151. 4、LineNumber @H_403_25@
  152. 指定的行 @H_403_25@
  153. 5、StartLine,+N @H_403_25@
  154. 从startLine开始,向后的N行; @H_403_25@
  155. '1.+2': @H_403_25@
  156. Command: @H_403_25@
  157. d:删除符合条件的行; @H_403_25@
  158. Forexample:删除/etc/inittab文件中1到10行的内容 @H_403_25@
  159. #sed'1,10d'/etc/inittab @H_403_25@
  160. Forexample:删除/etc/passwd文件包括hdoop的行 @H_403_25@
  161. #sed'/hdoop/d'/etc/passwd @H_403_25@
  162. p:显示符合条件的行; @H_403_25@
  163. Forexample:显示/etc/passwd文件中以hdoop开头的行 @H_403_25@
  164. #sed'/^hdoop/p'/etc/passwd @H_403_25@
  165. a\string:在指定的行后面追加新行,内容为string @H_403_25@
  166. Forexample:显示/etc/passwd文件中以hdoop开头的行后面追加“Iamhdoop” @H_403_25@
  167. #sed'/^hdoop/a\Iamhdoop/etc/passwd @H_403_25@
  168. 如果想加两行的话,我可以使用换行符\n:可以用于换行 @H_403_25@
  169. i\string:在指定的行前面添加新行,内容为string @H_403_25@
  170. Forexample:显示/etc/passwd文件中以hdoop开头的行前面追加“Iamhdoop” @H_403_25@
  171. #sed'/^hdoop/i\Iamhdoop'/etc/passwd @H_403_25@
  172. rFILE:将指定的文件内容添加至符合条件的行处 @H_403_25@
  173. Forexample:在/etc/passwd文件中第二行后面追加/etc/inittab文件中的内容 @H_403_25@
  174. #sed'2r/etc/inittab/etc/passwd即可: @H_403_25@
  175. 如果是在指定第一行和第二行后面添加指定文件内容的行 @H_403_25@
  176. #sed'1,2r/etc/inittab/etc/passwd @H_403_25@
  177. wFILE:将地址指定的范围内的行另存至指定的文件中; @H_403_25@
  178. Forexample:在/etc/passwd文件中以hdoop开头的行保存至/tmp/hdoop.bak @H_403_25@
  179. #sed'/^hdoop/w/tmp/hdoop.bak'/etc/passwd @H_403_25@
  180. s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串 @H_403_25@
  181. Forexample:查找/etc/passwd文件中hdoop字符换成大写的hoop @H_403_25@
  182. #sed's/hdoop/HDOOP/'/etc/passwd @H_403_25@
  183. 修饰符 @H_403_25@
  184. g:全局替换 @H_403_25@
  185. i:查找时忽略字符大小写 @H_403_25@
  186. @H_403_25@
  187. \(\),\1,\2 @H_403_25@
  188. Forexample:将下面的like修改为liker,love修改为lover @H_403_25@
  189. l..e:like-->liker @H_403_25@
  190. love-->lover @H_403_25@
  191. @H_403_25@
  192. #sed's#\(l..k\)#\1r#g'/tmp/text @H_403_25@
  193. #sed's#l..k#&r#g'/tmp/text @H_403_25@
  194. &:引用模式匹配整个串 @H_403_25@
  195. @H_403_25@
  196. Forexample:将下面的小写l换成大小l @H_403_25@
  197. like-->Like @H_403_25@
  198. love-->Love @H_403_25@
  199. #sed's#l\(..e\)#L\1#g'sed.text @H_403_25@
  200. grep和sed命令的使用,就先告一段落,以上内容会陆续进行添减,敬请关注:@H_403_25@

猜你在找的正则表达式相关文章