FINDSTR正規表示式小結

2021-09-28 18:27:58 字數 2664 閱讀 5424

前言:最近寫了乙個bat用於快速編譯swf至目標目錄,想利用findstr命令通過匹配目標目錄名稱,匹配數量大概600多個,發現匹配耗時比較久,大概花費10餘秒,因此還是放棄字元匹配,乖乖拼出全稱來定位目錄。感覺bat的執行效率是比較低的。

稍加搜尋,看到一些帖子也印證了我的想法。bat不適合做太複雜的事。還是分享下findstr命令的用法。

findstr正規表示式小結

findstr的正規表示式是用來定義字串樣式的

它的元字元有 .、*、[-]、\、\<、\>、^、$等。

參與運算的物件主要是字母、數字、符號、還有漢字。而且該運算具有特殊的規則。

findstr中正規表示式用法規則小結

● 行首行尾規則 

如"^rem"、"bat$" 表示從行首匹配rem、從行尾匹配bat。

○ 行首行尾可以是英文、數字,還可以是漢字。

● 字符集規則 

如 [}>]、[abc]、[123]、[a-za-z]、[0-9] 表示行中含有集裡的任意字元即匹配。

注意,這是集合,不是串。如:"[news]"不能理解為查詢含有news單詞的行,只能是定位含有n e w s 4個字母之一的行。

○ 需要說明的是,該字符集裡的集元素可以是字母和數字和一般的半形字元。

如可以是 : } { , . ] [等,但雙引號"不被識別,不能是漢字(漢字不是ascii碼)。

○ "[.*]" 集合**現的 .*,作為普通字元,沒有特殊含意。

○ 可以組合使用,如 [aef1-3x-z]表示該字符集是aef和數字1-3和字母x-z等元素的並集.

○ "[ah][1-3]" 表示 2 個字元。

● 減法規則

[^abc] 參照幫助資訊,本該理解為,匹配不含abc三個字母的行。但在xp系統下,卻不被正確解釋。

○ "[^echo.]" 實際表示在查詢結果中去除為"echo."字串的行。

● 萬用字元和重複符規則

即 .*

○ 萬用字元 . 代表任何乙個字元,包括字母、數字、半形符號還有空格,但不包括空行。

○ 重複符 * 代表前面字母的重複(重複次數從0到多次)。如 .* [a-z]* [0-9]* [abc]* a*

● 單詞字首字尾定位規則 

"\"該單詞可以是英文單詞和數字,該單詞規則不適用於漢字。符號 \ 為轉義符。

○ "\" 查詢文字中,英文單詞以ed為字尾的單詞 如 called added changed

○ "\" 用來精確查詢單詞。這裡用來精確查詢單詞call ,那麼calling called 就不被匹配。

○ "\<3389\>" 表示精確查詢3389 那麼33898、233895就不被匹配。

● 關鍵字規則 "string"

該string可以是英文單詞、漢字、數字、符號以及上面規則的組合.

能夠正確解讀漢字的只有行首行尾規則,和該規則。

● 轉義符 \ 

把表示式中的特殊字元(元字元)轉化為普通字元。但不能對雙引號" 和大於號 > 轉義。

常見寫法

\.、\*、\\、\[、\]、\-、\\<   

如 "\.bat" 把萬用字元轉化為普通的句點,這裡表示匹配".bat"結尾的批處理檔名。也可以寫成 "[.]bat"

示例1:

dir /a /b /s d:\ | findstr /i "\.bat$"

○ 查詢行尾是".bat"字串的行,並顯示出來。

\是轉義符號,使句點.不再是萬用字元,而是檔案拓展名中的點。用於表示式 的 關鍵字查詢,在這裡是列舉字尾是bat的批處理檔案。

dir /a /b /s d:\ | findstr /i ".bat$"

○ 同效於 dir /a /b /s d:\ | findstr /i "bat$" 

// 不,有一字元之差

findstr /r /i /n google d:\bat\wenben.txt | more

○ 使用 strings 和 [drive:][path] filename [...] 在命令字串中,所有 findstr 命令列選項必須在 strings 和 [drive:][path] filename [...] 之前。

findstr /r /i /n /x /c:"google news" d:\bat\htm\meinv.txt | more

○ /x 列印完全匹配的行.查詢只有「google news」單詞的行。

如果是帶空格的字串 ,要用雙引號引起來,而且要用引數/c:"string1 string2"

findstr . 2.txt 或 findstr "." 2.txt

○ 從檔案2.txt中查詢任意字元,不包括空字元或空行。

空字元不是空格。.可以匹配空格

// f:>echo hi pz|findstr "...pz"

// hi pz

// f:>echo hi pz|findstr "....pz"

//findstr /i /n [g-k] d:\bat\htm\meinv.txt | more

○ 表示式中[g-k],可以是字母a-z 或者數字0-9,不能是漢字。而且要順序排列,由小到大。

示例2下面的命令實現提取網頁的特定行

findstr /r /i /n %string% %htmfile%

%htmfile% 表示網頁檔案(文字檔案)。

%string% 表示 關鍵字或字串表示式。

fei 正規表示式 正規表示式小結

常用的元字元常用的反義 常用的限定符 語法 說明 語法 說明 語法 說明 w 匹配字母或數字或下劃線或漢字 w匹配任意不是字母 數字 下劃線 漢字的字元 重複零次或者更多次 s匹配任意的空白字元 s匹配任意不是空白符的字元 重複一次或更多次 d匹配數字 d匹配任意非數字的字元 重複零次或一次 b匹配...

批處理 正規表示式 findstr 整理

語法 findstr b e l r s i x v n m o p offline g file f file c string d dirlist a colorattribute strings drive path filename 引數 b 如果位於行的開頭則匹配模式。e 如果位於行的末尾...

批處理 正規表示式 findstr 整理

findstr 使用正規表示式搜尋檔案中的文字模式。語法findstr b e l r s i x v n m o p offline g file f file c string d dirlist a colorattribute strings drive path filename 引數 b...