2020年6月18日 星期四

字符串查找增強 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" xy'在文件xy中尋找"hello"或
"there" 。'FINDSTR /C:"hello there" xy'在文件xy尋找"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]補字符類別:任何不在字符集中的字符
  [xy]範圍:在指定範圍內的任何字符
  \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$" 123.txt
在文件123.txt中查找行尾為step字符串的行。
如:
123 dstep
123step
這兩行也匹配的。

例11
findstr "^step$" 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中查找包括abcezy其中任意一字母的行。

例15
findstr "[a-fl-z]" 2.txt
在文件123.txt中查找小寫字符a到f或l到z的任意一字母的行,但不包含gh I jk這幾個字母。

例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 "[^az]" 123.txt
如果是純字母的行便過濾掉,例如sdlfjlkjlksjdklfjlskdf這樣的字符將被過濾,如果是sdfksjdkf99999這樣的形
式則過濾不了。
注意,純字母的行不能有空格,不論行首行尾或者是行中都不能有空格,否則過濾失敗!

例19
findstr "[^add]" 123.txt
過濾僅含有由add三個字母組成的純字母字符串的行。
如:
a
ad
ddaadd
dd
這些行都會被過濾。
注意,僅含有由add三個字母組成的純字母字符串的行不能有空格,不論行首行尾或者是行中都不能有空格,否則
過濾失敗!

例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\”字符串的行,這裡\\是把\給轉義了。

★要查找的字符串含有\時,可以用\\把\給轉義;或者把\變成\\\\。如果目標字符串的\後面還有內容,則搜索字符
串\除了要變成\\(本身的轉義要求),還可以在它後面再加一個字符,如\\.
————————————————
版权声明:本文为CSDN博主「郁闷阳光」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/playboy1/java/article/details/6869384

沒有留言: