终于明白vim 和 grep 中 的正则表达式的用法, vim 正则表达式 和grep基本正则表达式 几乎同样

要搞清楚 vim中的正则和普通的Perl正则表达式的区别: 由于在perl中全部的元字符 均可以直接使用, 不须要在 元字符的前面加 反斜杠.linux

可是在vim, 包括grep中就有所区别, 一样是元字符, 有的就要在前面加上 反斜杠才行. 因为 vim和grep各自的关于正则的用法不尽相同, 因此 只能是 一个一个的记清楚,别的没有什么好办法了. 主要是记住不一样的地方.

第一, 只说在vim中的正则: 参考: https://www.tuicool.com/articles/QzUBZr

  1. 首先 vim中的元字符 有 四种情形, 分别表示的是 四种做用:
  • 用来表示 单个 的 字符 的 元字符; (即 "字符"元字符, 注意的是, 每一个字符元字符 表示的, 表明的老是 一个 字符 由于 你是一个元字符嘛, 因此你也只能表明一个字符, 要表示数量, 有专门的 "数量"元字符)
  • 用来表示 数量的 元字符; 即 "数量"元字符
  • 用来表示 位置的 元字符 , 即 "位置" 元字符
  • 用来表示 分组的 元字符 即 "分组" 元字符. (括号元字符)
  1. 在这些元字符中
  • 字符元字符包括: ., [abc] ,[^abc] , 以及专门符号表示的, 如:\d, \D, \w, \W, \x. \X, \s, \S (注意 若是要表示空格字符的话, 使用 \s) <font color="red"> 或者要表示空格, 使用 \空格,这里, 空格必须转义 由于默认的, 空格表示 命令单词的 分割. </font> 若是要 表示 "字符元字符"自己的话, 要用\ 转义, 好比: \. \[ \* \\正则表达式

  • 数量元字符中, 只有* 不用反斜杠, 其余的都要用 反斜杠, 包括: \+, \? \{m, n}, 注意, 大括号表示次数, 模糊匹配次数, 只须要在第一个大括号前加反斜杠, 固然在第二个大括号前加反斜杠也是能够的. 好比: /k\{2, 4}/ = /k\{2, 4\}shell

  • 位置元字符, 只有四个: ^, $, \<表示单词的开头 , \> 表示单词的结尾. 很清楚的: ^ 说的是 行首, 是匹配 **一行**的 开始 , 关心的是行! 而 \<才是句中的 单词 的词首. 一个是行首, 一个是词首. ... 若是只是要匹配 1个 单词, 则使用 \w* 由于当一个单词结束时, 必然会遇到空格或 其余标点符号. 其中\<和 \> 是能够单独使用的, 单词的开头 是以 "空格" 和 标点符号为 标识的 . 因此: /r/ 和 /\<r/ 是不一样的, <font color="red"> 特别要注意, 既然是单词 的开头或结尾, 那么 这个单词就必须是以 \w, 或 [0-9a-zA-Z] 开头的才行, 若是不是以这些开头的, 就不能算是开头! </font>vim

  • 括号元字符, vim中的括号元字符 要用 反斜杠表示 : \( \) 而 前向 引用仍然用 \1, \2 等表示.ui

大多数的元字符在 替换字符串中, 都将失去意义, 表示普通字符, 只有极少数的几个元字符 仍有意义 好比&...

使用vim的正则表达式主要有 三种状况: 一是 搜索, 二是删除 : 使用 /d命令, 三是 替换

**在使用删除命令 的时候, 略有不一样, 默认的是 只删除当前(向下查找)找到的第一个 对象. 若是要表示 整个文件 的 全部的范围的 , 要用 g(=global) 不能用 %(替换用的是%), 并且要放在 最前面, 即 ** : g/^$/d url


第二, grep中的正则. 跟 vim中的正则, 除了 "扩展正则" 中的元字符不一样外, 其余几乎彻底同样, 好比 在数词 元字符的表示上, 大括号都要用 \{m, n \} (这里的 n后面的大括号必定要加\)

  1. 一般支持的是 "基本正则表达式", 若是要使用 "扩展正则表达式" , 能够有两种方法, 一是, 使用 -E选项, 二是 使用 专门的一个命令: egrep.
  2. 记住, 扩展的正则表达式, 只比 "基本正则"多4个 元字符: +, ? |, 括号 () 好比: 要过滤 bootps或 bootpc 使用 cat /etc/services | grep -n 'bootps|bootpc' 会返回空, 而用 cat /etc/services | grep -nE 'bootps|bootpc' 则返回bootps和bootpc的行, 这是由于 | 只在 "扩展正则"中被支持

grep的用法上, 除了 要正确使用 单引号 括起来的正则表达式以外, 还要 熟悉它的 几个 经常使用的选项, 好比: -n, -E , -v(反选) -A, -B 等等.

<br>spa


<br> ### 最后记住的是, 正则表达式和 shell的 通配符不同! shell的通配符一般只有` *, ? [... ] 三个.`.net

linux中的几乎全部的命令, 都会有 控制台的屏幕 输出 , 像 head, tail, grep等等 , 因此 凡是这些 控制台屏幕的 输出内容 , 几乎均可以将 它们 重定向到 文件中.

相关文章
相关标签/搜索