cmd命令---find與findstr


轉自:

1、DOS命令大全:Find命令詳解

2、http://www.jb51.net/article/18987.htm

 

1、find命令

在一個文件或多個文件中搜索指定的文本字符串。當搜索指定的文件后,find 將顯示出包含指定字符串的所有行。

語法

C:\Users\>find /?
在文件中搜索字符串。

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

  /V         顯示所有未包含指定字符串的行。
  /C         僅顯示包含字符串的行數。
  /N         顯示行號。
  /I         搜索字符串時忽略大小寫。
  /OFF[LINE] 不要跳過具有脫機屬性集的文件。
  "string" 指定要搜索的文本字符串。
  [drive:][path]filename 指定要搜索的文件。

/? 在命令提示符顯示幫助。 如果沒有指定路徑,FIND 將搜索在提示符處鍵入的文本或者由另一命令產生的文本。

命令注釋

  • 指定字符串

    如果不使用 /i,find 將精確搜索指定的字符串。例如,find 命令認為字符“a”和“A”是不同的。但是,如果使用 /i,find 不區分大小寫,並將“a”和“A”視為同一個字符。

    如果要搜索的字符串包含引號,必須對包含在字符串中的單引號用雙引號引起來,即"StringContaining""QuotationMarks"。

  • 將 find 用作篩選器

    如果省略文件名,find 將用作篩選器,從標准輸入源(通常是鍵盤、管道或重定向的文件)得到輸入,然后顯示任何包含字符串的所有行。

  • 命令語法次序

    可以按任何順序鍵入 find 命令的參數和命令行選項。

  • 使用通配符

    在用 find 命令指定的文件名或擴展名中不能使用通配符(* 和 ?)。要搜索使用通配符指定的一組文件中的字符串,可以在 for 命令中使用 find 命令。

  • 將 /v 或 /n 與 /c 一起使用

    如果在相同的命令行中指定 /c 和 /v ,find 將顯示不包含指定字符串的行數。如果在相同的命令行中指定 /c 和 /n,find 將忽略 /n。

  • 在 find中使用回車

    find 命令不能識別回車。當使用 find 在包含回車的文件中搜索文本時,必須將搜索字符串限制在可以在兩個回車之間找到的文本,也就是不能被回車中斷的字符串。例如,“tax”與“file”之間出現回車時,find 不會報告找到“tax file”字符串。

命令范例

要從Pencil.ad 顯示包含字符串“Pencil Sharpener”的所有行,請鍵入:

find "Pencil Sharpener" pencil.ad

要查找將文字包含在引號之內的字符串,必須首先將整個字符串用引號圍繞起來。其次,每個包含在字符串內的引號必須使用雙引號。要在 Report.doc中查找“The scientists labeled their paper ‘for discussion only.’It is not a final report.”,請鍵入:

find "The scientists labeled their paper ""for discussion only."" It is not a final report." report.doc

如果要搜索一組文件,可以使用帶有 for 命令的 find 命令。要在當前目錄中搜索包含 .bat 擴展名以及包含“PROMPT”字符串的文件,請鍵入:

for %f in (*.bat) do find "PROMPT" %f

要搜索硬盤以便在 C 驅動器上查找和顯示包含字符串“CPU”的文件名,請使用管道號 (|) 將 dir 命令的結果重新定向到如下所示的 find中:

dir c:\ /s /b | find "CPU"

因為 find 搜索區分大小寫並且 dir 產生的輸出是大寫的,所以必須用大寫字母鍵入字符串“CPU”或者將 /i 命令行選項與 find 一起使用。

 

2、findstr命令

使用常規表達式搜索文件中的文本模式。

語法:

C:\Users>findstr /?
在文件中尋找字符串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/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"。

一般表達式的快速參考:
  .        通配符: 任何字符
  *        重復: 以前字符或類出現零或零以上次數
  ^        行位置: 行的開始
  $        行位置: 行的終點
  [class]  字符類: 任何在字符集中的字符
  [^class] 補字符類: 任何不在字符集中的字符
  [x-y]    范圍: 在指定范圍內的任何字符
  \x       Escape: 元字符 x 的文字用法
  \<xyz    字位置: 字的開始
  xyz\>    字位置: 字的結束

有關 FINDSTR 常見表達法的詳細情況,請見聯機命令參考。

命令注釋

  • 在 findstr中使用常規表達式

    Findstr 可以在任何 ASCII 文件或文件中精確查找所要查找的文本。然而,有時要匹配的信息只有一部分或需要查找更寬廣的信息范圍。在這種情況下,findstr 具有使用常規表達式搜索各種文本的強大功能。

    常規表達式是用於指定文本類型的符號,與精確的字符串相反。標記使用文字字符和元字符。每個在常規的表達式語法中沒有特殊意義的字符都是文字字符,與出現的該字符匹配。例如,字母和數字是文字符號。元字符是在常規表達式語法中具有特殊意義(操作符或分隔符)的符號。

    下表列出 findstr 接受的元字符。

    字符
    . 通配符:任何字符
    * 重復:以前字符或類的零次或多次出現
    ^ 行位置:行的開始
    $ 行位置:行的結尾
    [class] 字符類:集合中任何一個字符
    [^class] 反類:不在集合中的任何一個字符
    [x-y 范圍:范圍:指定范圍內的任何字符
    \x 取消:元字符 x 的文字用途
    \<xyz 字位置:字首
    xyz> 字位置:字尾

    常規表達式語法的特殊字符在一起使用時功能最強大。例如,以下匹配任意字符串的通配符 (.) 和重復符 (*) 的組合:

    .*

    將如下表達式用作匹配以“b”開頭並以“ing”結尾的任何字符串的更大表達式的組成部分:

    b.*ing

命令范例

用空格分隔多個搜索字符串,除非參數以 /c 為前綴。要在文件 x.y中搜索“hello”或“there”,請鍵入:

findstr "hello there" x.y

要在文件 x.y中搜索“hello there”,請鍵入:

findstr /c:"hello there" x.y

要查找文件 Proposal.txt中出現的所有單詞“Windows”(首字母 W 大寫),請鍵入:

findstr Windows proposal.txt

要搜索包含單詞 Windows 的當前目錄和所有子目錄中的每個文件,不考慮字母大小寫,請鍵入如下命令:

findstr /s /i Windows *.*

要查找包含字“FOR”的所有行(前面可有任意數量的空格,如:計算機程序中的循環),並包括每次出現的行號,請鍵入:

findstr /b /n /c:"*FOR" *.bas

如果要在相同組文件中搜索幾個不同項目,請創建在新行上包含每個搜索標准的文本文件。也可以列出要在文本文件中搜索的確切文件。要使用文件 Finddata.txt中的搜索條件,請搜索 Filelist.txt中列出的文件,然后將結果保存到文件 Results.out中,請鍵入:

findstr /g:finddata.txt /f:filelist.txt > results.out

假設您想要找到當前目錄和所有子目錄中每個包含“computer”這個單詞的文件,而不考慮字母的大小寫。要列出包含單詞“computer”的所有文件,請鍵入:

findstr /s /i /m "\<computer\>" *.*

現在假定不僅需要查找字“computer”,而且需要查找以字母“comp”開頭的所有其他字,例如“compliment”和“compete”。請鍵入:

findstr /s /i /m "\<comp.*" *.*

 

3、find與findstr命令的比較

find命令的基本格式是這樣的:find "要查找的字符串" 要查找的文件,在這里,"要查找的字符串"這個內容是必不可少的,引號也是必須的。例如:find "bathome" d:\test.txt,表示在D盤根目錄下的文本文件test.txt中查找含有 bathome 這一字符串的所有行。 


find的結果將會有兩種情況:   
1、當文件中包含要查找的字符串時,將返回這個字符串所在位置的整行內容,具體格式為:第一行是"---------- ×××" (×××表示被查找的文件名,不包括引號對),第二行開始才出現包含字符串的整行內容;   2、當文件中沒有出現要查找的字符串時,find的結果僅僅返回"---------- ×××" 這一行內容(×××表示被查找的文件名,不包括引號對)。 在查找指定字符串的時候,有的場合需要區分大小寫,有的場合則對大小寫並不在意,如何實現這些需求呢?   很簡單,在find的時候,添加或取消/i開關就是了,具體用法為:find /i "Abc" test.txt 表示不區分大小寫,文本內容中含有 Abc、abc、ABC之類的都算;find "Abc" test.txt則嚴格區分字符大小寫,只能匹配Abc,而不能匹配abc、ABC之類的字符。   有時候,我們的需求並不是為了查找到某個字符串,而是要檢測哪些行不含有特定的字符串,這個時候,可以使用開關/v,用法為:find /v "Abc" test.txt,它表示查找那些不含字符串Abc的行(Abc要區分大小寫),如果不區分abc的大小寫,那么,應該寫成 find /i /v "Abc" test.txt。   有時候,我們的要求很簡單,僅僅只是想統計包含某個字符串的行總共有多少,這個時候,應該使用開關/c,寫成 find /c "abc" test.txt。   如果要在每行的行首顯示行號,怎么辦?那就寫成 find /n "abc" test.txt 吧,它會把test.txt的內容都顯示出來,與原文不一樣的是,在每行內容的行首,都加上了行號——注意,它僅僅是在顯示的時候加上行號而已,並沒有真正改寫文件的內容。   如果你看到這樣的命令:find /i /v /n "Abc" test.txt,請一點要先沉住氣,不要被眾多的開關弄得眼花繚亂嚇趴下了,仔細對照上面的解釋,相信你很快就會理解它的功能:在test.txt文件中,查找不包含字符串Abc的所有行,並在行首標上這些行的行號,查找的時候,字符串Abc不區分大小寫。   要是使用這樣的語句:find /c /n "abc" test.txt,會出現什么樣的結果呢?答案是:開關/n會被忽略掉,最終結果不會顯示帶行號的行內容,只會顯示匹配的總行數而已。   echo abcdef|find "abc",見過這種寫法嗎?它的含義是:在字符串abcdef中,檢測是否存在字符串abc,也就是說,find支持管道符號,把管道符號之前的語句的執行結果,作為指定字符串的查找對象,甚至,你可以使用這樣的語句:find "abc" test.txt|find "xyz",它表示在test.txt中查找同時存在字符串abc和字符串xyz的行,只要你願意,你可以繼續用管道符號把這個find語句連接下去,我們把這個過程稱為多重過濾。   在前面,我們說過,在 find "要查找的字符串" 要查找的文件 這條命令語句中,引號是必須的,要是我們要查找的內容就是雙引號本身,那又該怎么辦?   答案很簡單:把雙引號本身先用雙引號轉義,再放到雙引號對中,寫成 find """" test.txt 的格式,如果要查找兩個連續的雙引號,則應該寫成 find """""" test.txt。   如果你想查找兩行之間的字符塊,我勸你趁早放棄這個瘋狂的想法,因為,find僅僅針對位於同一行上的字符串,不能查找跨行的字符塊。   
與findstr命令相比,find的功能確實有限得多,僅僅因為不支持正則表達式這一點。   然而,find並非一無是處,憑借自己的獨門絕技,在與findstr的競爭中,它掙得了一席之地。   這些獨門絕技是什么呢?   
1統計含指定字符串的總行數。find /c "abc" test.txt可以統計test.txt中含有字符串abc的總行數,而findstr則沒有直接提供該功能,需要配合for語句才能實現;   2find可以讀取Unicode格式的文本,而findstr則不行;   3find可以過濾某些特殊字符,而findstr則不行,比如,我們在使用fsutil fsinfo drives語句查詢磁盤分區的時候,如果想讓盤符分行顯示而不是顯示在同一行上的時候(這在用for語句提取盤符的時候很有用),find可以大顯身手,而findstr只能干瞪眼了,具體語句為:fsutil fsinfo drives|find /v ""

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM