findstr 命令使用
find /? 在文件中搜索字符串。 FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]] /V 顯示所有未包含指定字符串的行。 /C 僅顯示包含字符串的行數。 /N 顯示行號。 /I 搜索字符串時忽略大小寫。 /OFF[LINE] 不要跳過具有脫機屬性集的文件。 "string" 指定要搜索的文本字符串。 [drive:][path]filename 指定要搜索的文件。 如果沒有指定路徑,FIND 將搜索在提示符處鍵入 的文本或者由另一命令產生的文本。
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 常見表達法的詳細情況,請見聯機命令參考。
示例:
使用空格分隔多個搜索字符串,除非參數以 /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”,而且需要查找以字母“comp”開頭的所有其他單詞,例如“compliment”和“compete”。請鍵入:
findstr /s /i /m "/
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/2b01d7f5-ab5a-407f-b5ec-f46248289db9.mspx?mfr=true
實例:
1.findstr . 2.txt 或 findstr "." 2.txt
從文件2.txt中查找任意字符,不包括空字符或空行
====================
2.findstr .* 2.txt 或 findstr ".*" 2.txt
從文件2.txt中查找任意字符包括空行和空字符
====================
3.findstr "[0-9]" 2.txt
從文件2.txt中查找包括數字0-9的字符串或行
====================
4.findstr "[a-zA-Z]" 2.txt
從文件2.txt中查找包括任意字符的字符串或行
====================
5.findstr "[abcezy]" 2.txt
從文件2.txt中查找包括a b c e z y字母的字符串或行
====================
6.findstr "[a-fl-z]" 2.txt
從文件2.txt中查找小寫字符a-f l-z的字符串,但不包含g h I j k這幾個字母。
====================
7.findstr "M[abc][hig]Y" 2.txt
從文件2.txt中可以匹配 MahY , MbiY, MahY等…..
====================
8. ^和$符號的應用
^ 表示行首,"^step"僅匹配 "step hello world"中的第一個單詞
$ 表示行尾,"step$"僅匹配 "hello world step"中最后一個單詞
====================
9.finstr "[^0-9]" 2.txt
如果是純數字的字符串或者行便過濾掉,例如2323423423 這樣的字符串,如果是345hh888這樣的形式就不成了。
====================
10.findstr "[^a-z]" 2.txt
同上,如果是純字母的字符串或者行便過濾掉,例如 sdlfjlkjlksjdklfjlskdf這樣的字符,如果是sdfksjdkf99999這樣的形式,摻雜着數字就不成了
====================
11.*號的作用
前面已經說過了 ".*"表示搜索的條件是任意字符,*號在正則表達式中的作用不是任何字符,而是表示左側字符或者表達式的重復次數,*號表示重復的次數為零次或者多次。
====================
12.findstr "^[0-9]*$" 2.txt
這個是匹配找到的純數字,例如 234234234234,如果是2133234kkjl234就被過濾掉了。
Findstr "^[a-z]*$" 2.txt
這個是匹配找到的純字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被過濾掉了
如 果在搜索條件里沒有*號,也就是說不重復左側的搜索條件,也就是[0-9] [a-z]那只能匹配字符串的第一個字符也只有這一個字符,因為有行首和行尾的限制,"^[0-9]$"第一個字符如果是數字就匹配,如果不是就過濾掉, 如果字符串是 9 就匹配,如果是98或者9j之類的就不可以了。
=====================
13. "/<…/>"這個表達式的作用
這個表示精確查找一個字符串,/<sss 表示字的開始位置,sss/>表示字的結束位置
echo hello world computer|findstr "/<computer/>"這樣的形式
echo hello worldcomputer|findstr "/<computer/>" 這樣的形式就不成了,他要找的是 "computer"這個字符串,所以不可以。
echo hello worldcomputer|findstr ".*computer/>"這樣就可以匹配了
=====================
============================================= End
find 作用:從文件中收索字符串
格式:find 參數 "字符串" 路徑\文件名
參數: /V 顯示所有未包含指定字符串的行。
/C 僅顯示包含字符串的行數。
/N 顯示行號。
/I 搜索字符串時忽略大小寫。
/OFF[LINE] 不要跳過具有脫機屬性集的文件。
當文件中包含要查找的字符串時,將返回這個字符串所在位置的整行內容。默認情況下是區分大小寫的,若想要
不區分大小寫就是用參數 /i 有時候,我們的需求並不是為了查找到某個字符串,而是要檢測哪些行不含有特定的
字符串,這個時候,可以使用開關/v,用法為:find /v "Abc" test.txt,它表示查找那些不含字符串Abc的行(Abc要
區分大小寫),如果不區分abc的大小寫,那么,應該寫成 find /i /v "Abc" test.txt。還有一點是find 支持查找通配
符文件。如 find "1" *.txt。
findstr 是find的擴展,功能更強大
格式:findstr 參數 字符串 路徑\文件名
參數: /B 在一行的開始配對模式。 (就是指以字符串開頭,begin 這樣就方便了記憶)
/E 在一行的結尾配對模式。(就是指以字符串結尾,end 這樣就方便記憶)
/L 按字使用搜索字符串。就是將后面的""里的當成一個字符
/R 將搜索字符串作為一般表達式使用。
/S 在當前目錄和所有子目錄中搜索匹配文件。
/I 指定搜索不分大小寫。(英文:ignore 忽略)
/X 打印完全匹配的行。/x 是指完全匹配,就是說整行匹配,而不是含有關鍵字.
/V 只打印不包含匹配的行。(就是找出不包含字符串的)
/N 在匹配的每行前打印行數。(就是在輸出行的前面加上原文件中的行數,英文:number)
顯示的結果中冒號(:)是英文格式下的,在用for提取的時候需要注意!
/M 如果文件含有匹配項,只打印其文件名。(指定文件中輸出含有字符串的文件名)
/O 在每個匹配行前打印字符偏移量。o開關的作用是告訴你每行第一個字符前的位置是該文件中的第幾個字節
計算時別忘了文本中不可見的回車符合換行符將占兩字節(某些文本中只占一字節)。還有空格鍵一個字符。
肯定聽不懂。看例子:1.txt文件內容: 就三行三個c沒有空格。輸入:findstr /o c 1.txt 結果是:
c 0:c
c 3:c
c 6:c
怎么計算:第一行的c前沒有字符所以是0.第二行的c前一行只有一個c算一個字符由於是第二行所以算一個回車
2個字符就是:1+2=3同理第三個c前有2個字符和2個回車:1*2+2*2=6.。
/P 忽略有不可打印字符的文件。(我不清楚,個人無法解釋)
/C:string 使用指定字符串作為文字搜索字符串。
如:findstr /c:"a b" 1.txt 就會找出含"a b"的行並輸出來(注意a和b中間有空格)
如果不用參數/c:findstr "a b" 1.txt 就會輸出含有字母 a 或 b 的行。
/G:file 從指定的文件獲得搜索字符串。 (/ 代表控制台)。
如:findstr /g:2.txt 1.txt 就是把1.txt中含有2.txt中任一行內容的行輸出來。
上面的有點像:@echo off
for /f "delims=" %%a in ('type 2.txt') do (
findstr "%%a" 1.txt
echo.)
pause
(以上是自己試出來的,不保證正確)
/A:attr 指定有十六進位數字的顏色屬性。請見 "color /?"(使用這個可以在dos上面搞出不同顏色的字,自己想想)
/F:file 從指定文件讀文件列表 (/ 代表控制台)。
/D:dir 查找以分號為分隔符的目錄列表
/OFF[LINE] 不跳過帶有脫機屬性集的文件。
除非參數有 /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\> 字位置: 字的結束
<和\>是單詞錨定 ^是行首 $是行尾
注意的是:別把^,$和\<,\>弄混了一個是行一個是字。行開始與結束沒什么好說的。而字的開始和結束就不一樣了,例如:
1.txt里兩行為"abcd" 和 "abcd e"用命令findstr "cd\>" 1.txt 兩行都會出現,只要是連在一起(沒被空格開)的
並以cd結尾的(不 要求是行尾)都滿足。相當於文本中出現英語中以cd結尾的的單詞了的行都會輸出來。
舉一些例子(來自網絡):
1.findstr . 2.txt 或 findstr "." 2.txt 2.findstr .* 2.txt 或 findstr ".*" 2.txt
從文件2.txt中查找任意字符,不包括空字符或空行 從文件2.txt中查找任意字符包括空行和空字符
==================== ====================
3.findstr "[0-9]" 2.txt 4.findstr "[a-zA-Z]" 2.txt
從文件2.txt中查找包括數字0-9的字符串或行 從文件2.txt中查找包括任意字符的字符串或行
==================== ====================
5.findstr "[abcezy]" 2.txt 6.findstr "[a-fl-z]" 2.txt
從文件2.txt中查找包括a b c e z y字母的字符串或行 從文件2.txt中查找小寫字符a-f l-z的字符串,但不包含g h I j k這幾個字母。
==================== ====================
7.findstr "M[abc][hig]Y" 2.txt 8. ^和$符號的應用
從文件2.txt中可以匹配 MahY , MbiY, MahY等….. ^ 表示行首,"^step"僅匹配 "step hello world"中的第一個單詞
$ 表示行尾,"step$"僅匹配 "hello world step"中最后一個單詞
==================== ====================
9.finstr "[^0-9]" 2.txt
如果是純數字的字符串或者行便過濾掉,例如2323423423 這樣的字符串,如果是345hh888這樣的形式就不成了。
====================
10.findstr "[^a-z]" 2.txt
同上,如果是純字母的字符串或者行便過濾掉,例如 sdlfjlkjlksjdklfjlskdf這樣的字符,如果是sdfksjdkf99999這樣的形式,摻雜着數字就不成了
====================
11.*號的作用
前面已經說過了 ".*"表示搜索的條件是任意字符,*號在正則表達式中的作用不是任何字符,而是表示左側字符或者表達式的重復次數,*號表示重復的次數為零次或者多次。
====================
12.findstr "^[0-9]*$" 2.txt
這個是匹配找到的純數字,例如 234234234234,如果是2133234kkjl234就被過濾掉了。
Findstr "^[a-z]*$" 2.txt
這個是匹配找到的純字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被過濾掉了
如 果在搜索條件里沒有*號,也就是說不重復左側的搜索條件,也就是[0-9] [a-z]那只能匹配字符串的第一個字符也只有這一個字符,因為有行首和行尾的限制,"^[0-9]$"第一個字符如果是數字就匹配,如果不是就過濾掉, 如果字符串是 9 就匹配,如果是98或者9j之類的就不可以了。
=====================
13. "\<…\>"這個表達式的作用
這個表示精確查找一個字符串,\<sss 表示字的開始位置,sss\>表示字的結束位置
echo hello world computer|findstr "\<computer\>"這樣的形式
echo hello worldcomputer|findstr "\<computer\>" 這樣的形式就不成了,他要找的是 "computer"這個字符串,所以不可以。
echo hello worldcomputer|findstr ".*computer\>"這樣就可以匹配了
14.吧1.txt文檔中超過10個字符的行輸出到2.txt
@findstr .......... 1.txt>2.txt
感覺好像2.txt里是少於10個字符的行,可是實際卻是超過10個字符的行,包括10個字符。
以上內容轉自:http://hi.baidu.com/bs0%D0%A1%B3%C2/blog/item/3f9c39ee0d29c0cbd439c94a.html
find比findstr更強的地方:
1、統計含指定字符串的總行數。find /c "abc" test.txt可以統計test.txt中含有字符串abc的總行數,而findstr則沒有直接提供該功能,需要配合for語句才能實現;
2、find可以讀取Unicode格式的文本,而findstr則不行;
3、find可以過濾某些特殊字符,而findstr則不行,比如,我們在使用fsutil fsinfo drives語句查詢磁盤分區的時候,如果想讓盤符分行顯示而不是顯示在同一行上的時候(這在用for語句提取盤符的時候很有用),find可以大顯身手,而findstr只能干瞪眼了,具體語句為: 代碼: fsutil fsinfo drives|find /v ""