it-swarm.com.de

Windows rekursives grep Kommandozeile

Ich muss in Windows ein rekursives grep ausführen, in Unix/Linux etwa so:

grep -i 'string' `find . -print`

oder die am meisten bevorzugte Methode:

find . -print | xargs grep -i 'string'

Ich bin nur mit cmd.exe stecken, so habe ich nur Windows-Befehle eingebaut. Ich kann Cygwin oder Tools von Drittanbietern wie nxUtils auf diesem Server leider nicht installieren. Ich bin mir nicht mal sicher, ob ich PowerShell installieren kann. Irgendwelche Vorschläge, die nur cmd.exe-Built-Ins verwenden (Windows 2003 Server)?

194
Andy White

findstr kann rekursiv suchen (/ S) und unterstützt eine Variante der Regex-Syntax (/ R).

C:\>findstr /?
Searches for strings in files.

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         Matches pattern if at the beginning of a line.
  /E         Matches pattern if at the end of a line.
  /L         Uses search strings literally.
  /R         Uses search strings as regular expressions.
  /S         Searches for matching files in the current directory and all
             subdirectories.
  /I         Specifies that the search is not to be case-sensitive.
  /X         Prints lines that match exactly.
  /V         Prints only lines that do not contain a match.
  /N         Prints the line number before each line that matches.
  /M         Prints only the filename if a file contains a match.
  /O         Prints character offset before each matching line.
  /P         Skip files with non-printable characters.
  /OFF[LINE] Do not skip files with offline attribute set.
  /A:attr    Specifies color attribute with two hex digits. See "color /?"
  /F:file    Reads file list from the specified file(/ stands for console).
  /C:string  Uses specified string as a literal search string.
  /G:file    Gets search strings from the specified file(/ stands for console).
  /D:dir     Search a semicolon delimited list of directories
  strings    Text to be searched for.
  [drive:][path]filename
             Specifies a file or files to search.

Use spaces to separate multiple search strings unless the argument is prefixed
with /C.  For example, 'FINDSTR "hello there" x.y' searches for "hello" or
"there" in file x.y.  'FINDSTR /C:"hello there" x.y' searches for
"hello there" in file x.y.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurrences of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of Word
  xyz\>    Word position: end of Word

For full information on FINDSTR regular expressions refer to the online Command
Reference.
238
Michael Burr
findstr /spin /c:"string" [files]

Die Parameter haben folgende Bedeutung:

  • s = rekursiv
  • p = Nicht druckbare Zeichen überspringen
  • i = Groß- und Kleinschreibung wird nicht berücksichtigt
  • n = Zeilennummern drucken

Und der zu suchende String ist das Bit, das Sie nach /c: In Anführungszeichen setzen.

119
i_am_jorf

Ich habe gerade einen Text mit folgendem Befehl durchsucht, in dem alle Dateinamen aufgelistet sind, die meinen angegebenen 'Suchtext' enthalten.

C:\Users\ak47\Desktop\trunk>findstr /S /I /M /C:"search text" *.*
22
khichar.anil

Ich empfehle ein wirklich tolles Tool:

native unix utils:

Entpacken Sie sie einfach und legen Sie diesen Ordner in Ihre PATH-Umgebungsvariable und voila! :)

Funktioniert wie ein Zauber und es gibt viel mehr als nur grep;)

12
mPrinC

Rekursive Suche nach import Wort in src Ordner:

> findstr /s import .\src\*
9
Tonatio
for /f %G in ('dir *.cpp *.h /s/b') do  ( find /i "what you search"  "%G") >> out_file.txt
9
goldenBoy

Select-String hat am besten für mich funktioniert. Alle anderen hier aufgeführten Optionen, wie z. B. findstr, funktionierten nicht mit großen Dateien.

Hier ist ein Beispiel:

select-string -pattern "<pattern>" -path "<path>"

Anmerkung: Dies erfordert Powershell

5
blizz

Wenn Sie Perl installiert haben, können Sie ack verwenden, verfügbar unter http://beyondgrep.com/ .

3
Andy Lester