Windows でもgrep したい
Windows でもgrep したい
Windowsでもgrep に似たコマンドを探してみたらあったのでメモ。 Chocolatey で探してみたところ、CUIベースのコマンドがなさそうなので、 デフォのコマンドを使っておくのがよさそうです。
環境
-
Windows 10
findstrコマンド
コマンドプロンプトでは、findstr
が使える。 一応、オプションで検索文字列に正規表現が使える。
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.
fidstr [検索文字列] [path]
で検索できる。
cd [探したいディレクトリ]
findstr gist *.txt # ディレクトリ内のtxtファイルからgist を検索
-r
オプションで正規表現で検索。
findstr -r gist.* *.txt # 正規表現で検索
-i
オプションで大文字・小文字関係なしで検索。
findstr -i gist *.txt # 大文字・小文字関係なしで検索
-n
オプションで行数を表示。
findstr -n gist *.txt # 行数を表示
-sオプションで、ディレクトリ内にサブディレクトリがあれば再帰的に検索してくれる。
> findstr -n -s gist *.txt # 行数を表示
-m
オプションで、ファイル名も出力。
> findstr -s -m gist *.txt # ファイル名も表示
一階層下のみの特定のファイルを検索 というのはできないようである(指定が間違ってる?)。
> findstr -n gist .\*\*.txt
FINDSTR: Cannot open .\*\*.txt
Select-Stringコマンド
Select-String
コマンドは、PowerShell で使える。使ってみた感じ、findstr よりもファイル指定に柔軟性がある。PowerShell ISE を使うと、pathの補完も効くのでわかりやすい。
デフォでは、大文字・小文字を区別しないで検索する。
正規表現には、-Pattern
オプションを使う。
> Select-String -Pattern gist* *.txt
-casesensitive
オプションで、大文字・小文字を区別して検索する。
> Select-String -casesensitive gist *.txt
マッチしたファイル名のみを出力する場合、以下のコマンドでできるが、長い。。
Select-String gist *.txt | ls | Get-Unique
-Context
オプションで、検索にマッチした行の前後の行も出力する。
Select-String -Context 1,1 gist *.txt # 前の行、マッチした行、次の行を表示
パスの指定に柔軟性があるので、以下のような1階層下のすべてのサブディレクトリ内の特定のファイルでの検索もできる。
> Select-String gist .\*\*.txt
Select-String
は長いので、 エイリアスで、grep
を振っておく。
> Set-Alias grep Select-String
ただし、PowerShell を閉じると無効になるので、プロファイルに設定しておく。
notepad $profile # profileを開く
Set-Alias grep Select-String # profileに追加して保存
power shell を再起動して、Get-Alias
でエイリアスの確認。
> Get-Alias
Alias grep -> Select-String # エイリアスに登録されている!