天天看點

批處理常用DOS指令——find findstr

作者:魚躍刺桐

1.4 學習 find findstr 指令

學習要點:

1.字元串查找:find

2.字元串查找增強:findstr

一.字元串查找:find

在檔案中搜尋字元串。

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

/V 顯示所有未包含指定字元串的行。

/C 僅顯示包含字元串的行數。

/N 顯示行号。

/I 搜尋字元串時忽略大小寫。

/OFF[LINE] 不要跳過具有脫機屬性集的檔案。

"string" 指定要搜尋的文字串,

[drive:][path]filename 指定要搜尋的檔案。

基本格式:find "要查找的字元串" 要查找的檔案(不在目前目錄則需要給出完整路徑)

例1

find "abc" d:\abc.txt

在abc.txt中查找字元串abc的行。

/I 搜尋字元串時忽略大小寫。

例2

find /i "abc" d:\abc.txt

參數/i代表的是“Ignore”(忽略),也就是忽略大小寫。通過/I 參數可以不區分要查找的字元串“abc”的大小寫。

/N 顯示行号。

例3

find /n "abc" d:\abc.txt

參數/n代表英語單詞“Number”(号碼).。通過/n參數我們可以查找到字元串"abc"所在的行号。

/C 僅顯示包含字元串的行數。

例4

find /c "abc" d:\abc.txt

參數/c是英語單詞“Count”(計數)的縮寫。通過/c參數我們可以統計包含"abc"字元串的行數。

/V 顯示所有未包含指定字元串的行。

例5

find /v "abc" d:\abc.txt

這個參數用于找出檔案中不包含指定字元串的行。在這裡表示查找不包含"abc"字元串的行。

注意:find指令中要查找的字元串一字要用雙引号" "括起來。

二.字元串查找增強:findstr

在檔案中尋找字元串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]

[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]

strings [[drive:][path]filename[ ...]]

/B 在一行的開始配對模式。

/E 在一行的結尾配對模式。

/L 按字使用搜尋字元串。

/R 将搜尋字元串作為一般表達式使用。

/S 在目前目錄和所有子目錄中搜尋

比對檔案。

/I 指定搜尋不分大小寫。

/X 列印完全比對的行。

/V 隻列印不包含比對的行。

/N 在比對的每行前列印行數。

/M 如果檔案含有比對項,隻列印其檔案名。

/O 在每個比對行前列印字元偏移量。

/P 忽略有不可列印字元的檔案。

/OFF[LINE] 不跳過帶有脫機屬性集的檔案。

/A:attr 指定有十六進位數字的顔色屬性。請見 "color /?"

/F:file 從指定檔案讀檔案清單 (/ 代表控制台)。

/C:string 使用指定字元串作為文字搜尋字元串。

/G:file 從指定的檔案獲得搜尋字元串。 (/ 代表控制台)。

/D:dir 查找以分号為分隔符的目錄清單

strings 要查找的文字。

[drive:][path]filename 指定要查找的檔案。

除非參數有 /C 字首,請使用空格隔開搜尋字元串。

例如: 'FINDSTR "hello there" x.y' 在檔案 x.y 中尋找 "hello" 或

"there" 。 'FINDSTR /C:"hello there" x.y' 在檔案 x.y 尋找 "hello there"。

1.基本格式:findstr " strings " [drive:][path]filename

Strings 是要查找的内容。

[rive:][path]filename 指定要查找的檔案,路徑可預設,預設情況下為目前目錄。

例1

findstr "icq" 123.txt

在123.txt中查找包含有“icq”這三個字元串的行。

/I 指定搜尋不分大小寫。

例2

findstr /i "MSN" 123.txt

在123.txt中查找包含有“MSN”這三個字元的行,且不區分大小寫。

★/R 将搜尋字元串作為正規表達式使用。參數/R 強調以正規表達式規則來解讀字元串。R - Right 右即為正。我們

都說右手是正手,是以引申為右為正,左為反。

例3

findstr /r "icq msn" 123.txt

在123.txt中查找包含有 “icq”或“msn”的行,查找的多個字元串間用空格隔格開。

/S 在目前目錄和所有子目錄中搜尋。

例4

findstr /s /i "MSN" *.txt

在目前目錄和所有子目錄中的txt檔案中搜尋字元串"MSN"(不區分字母大小寫)。

/C:string 使用指定字元串作為文字搜尋字元串。

例5

findstr /c:"icq msn" 123.txt

在123.txt中查找包含有 “icq msn”這幾個字元的行。注意,這裡“icq msn”是一整體的。

此參數多用于查找含有空格的字元串。

★在使用 findstr "我 你 他" test.txt 的時候,并不能查找到内容,但是,加上開關 /i 或者 /r 之後就正确無誤

了,可能是在查找多個純中文字元串的時候的一個bug吧;單個的純中文字元串沒有任何問題。

2.findstr 指令中正規表達式的用法規則

一般表達式的快速參考:

. 通配符: 任何字元

* 重複: 以前字元或類别出現零或零以上次數

^ 行位置: 行的開始

$ 行位置: 行的終點

[class] 字元類别: 任何在字元集中的字元

[^class] 補字元類别: 任何不在字元集中的字元

[x-y] 範圍: 在指定範圍内的任何字元

\x Escape: 元字元 x 的文字用法

\<xyz 字位置: 字的開始

xyz\> 字位置: 字的結束

● 通配符和重複符規則,即 . 和 *

通配符,即一個句點,代表任何一個字元,而且隻能是一個,包括字母、數字、半角符号還有空格。

重複符,即型号* 代表前面字母的出現次數(出現次數從0到多次,0表示沒有)。

findstr . 123.txt 或 findstr "." 123.txt

在檔案123.txt中查找任意字元,不包括空行。

例6

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

在檔案123.txt中查找任意字元,包括空行。

例7

findstr ac* 123.txt

在檔案123.txt中查找出現一個“a”字元串,以及a後面出現過0次或者任意次c的字元行。

如:

a

ac

acc

addc

等都比對。

例8

findstr ak5* 123.txt

在檔案123.txt中查找出現一個“ak”字元串,以及ak後面出現過0次或者任意次5的字元行。如:

ak

ak5

akbbb

ak125

ak555

等都比對。

------------------------------------------------------------------------------------------------------

●行首、行尾符規則,即 ^ 和 $

例9

findstr "^step" 123.txt

在檔案123.txt中查找行首為step字元串的行。

如:

stepkdka

step 456

這兩行都比對的。

例10

findstr "step#34; 123.txt

在檔案123.txt中查找行尾為step字元串的行。

如:

123 dstep

123step

這兩行也比對的。

例11

findstr "^step#34; 123.txt

在檔案123.txt中查找行首為step,且行尾也為step的行,即step獨自一行。

● 字元集規則,即[class]

①表示含有集裡的任意一個字元的即比對。

②該字元集裡的元素可以是字母和數字和一般的半角字元,如:}{ ,.][等,但雙引号"不被識别。不能是漢字, 漢字

不被正确解釋(漢字不是ASCII碼)。

如果在字元集内插入通配符和重複符号,即"[.*]"将會把. 和 *視為普通字元,沒有通配和重複的含義。

例12

findstr "[0-9]" 123.txt

在檔案123.txt中查找數字0-9的任意之一的行。

如:

4kkb

1 lkka cc

這兩行都比對。

例13

findstr "[a-zA-Z]" 123.txt

在檔案123.txt中查找包括任意字母行。

例14

findstr "[abcezy]" 2.txt

在檔案123.txt中查找包括a b c e z y其中任意一字母的行。

例15

findstr "[a-fl-z]" 2.txt

在檔案123.txt中查找小寫字元a到f 或l到z的任意一字母的行,但不包含g h I j k這幾個字母。

例16

findstr "M[abc][123]Y" 2.txt

在檔案123.txt中查找可以比對 Ma1Y , Mb1Y, Mc1Y; Ma2Y , Mb2Y, Mc2Y; Ma3Y , Mb3Y, Mc3Y的行。

● 減法規則,即[^class]

例17

findstr "[^0-9]" 123.txt

如果是純數字的行便過濾掉,例如2323423423 這樣的字元串被過濾,345hh888這樣的形式則過濾不了。

注意,純數字的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!

例18

findstr "[^a-z]" 123.txt

如果是純字母的行便過濾掉,例如 sdlfjlkjlksjdklfjlskdf 這樣的字元将被過濾,如果是sdfksjdkf99999這樣的形

式則過濾不了。

注意,純字母的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!

例19

findstr "[^add]" 123.txt

過濾僅含有由a d d三個字母組成的純字母字元串的行。

如:

a

ad

ddaadd

dd

這些行都會被過濾。

注意,僅含有由a d d三個字母組成的純字母字元串的行不能有空格,不論行首行尾或者是行中都不能有空格,否則

過濾失敗!

例20

findstr "[^echo]" 123.txt

過濾僅含有由e c h o 四個字母組成的純字母字元串的行。

如:

e

c

ec

cho

chooo

這些行都會被過濾。

●單詞字首字尾定位規則,即\<xyz和xyz\>

該xyz可以是英文單詞或數字,但不适用于漢字。符号 \ 了解為轉義符,化解小于号和大于号的重定向指令含義。

該規則是比對類似單個英文單詞的。

例21

findstr "\<echo" 123.txt

所有含有以echo為字首的字元串的行,都比對。

如:

echo:kkk a add

jjkk echo

這兩行都比對。

(思考:為什麼:echo也比對?)

例22

findstr "echo\>" 123.txt

所有含有以echo為字尾的字元串的行,都比對。

如:

qq bbecho 這一行也比對。

(思考:為什麼kkkk echo:也比對?)

例23

findstr "\<end\>123.txt

這裡是用來精确查找單詞。查找單詞end的行,

注意:

ended

cdkend

bcd-end-jjkk

這類詞都不比對。

(思考:為什麼end echo和end也比對?因為\<xyz\>格式要查找的是單個英文單詞。)

● 轉義符 \

把表達式中的特殊字元(元字元)轉化為普通字元。常見寫法:

\.

\*

\\

\[

\]??

\-

例24

findstr "\.abc" 123.txt

在檔案123.txt中查找可以比對“.abc”字元串的行,這裡\。是把。給轉義了。

例25

findstr "1\\" 123.txt 或findstr "1\\\\" 123.txt

在檔案123.txt中查找可以比對“1\”字元串的行,這裡\\是把\給轉義了。

★要查找的字元串含有\時,可以用\\把\給轉義;或者把\變成\\\\。如果目标字元串的\後面還有内容,則搜尋字元

串\除了要變成\\(本身的轉義要求),還可以在它後面再加一個字元,如\\.

繼續閱讀