終於明白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等等 , 因此 凡是這些 控制檯屏幕的 輸出內容 , 幾乎均可以將 它們 重定向到 文件中.

相關文章
相關標籤/搜索