PowerShellのやり方が、ちょっとだけ分かった。
対応表
シェル | スペル | 短縮形 |
---|---|---|
Bash | grep |
- |
PowerShell | Select-String |
sls |
Bash
コマンド形式
$ grep [オプション] <検索したい文字列> [ファイル名]
# [オプション]: 任意(以下は、私がよく使うオプション)
-i: 大文字小文字の区別をしないで検索する
-I: バイナリファイルは検索対象外にする
-n: 検索に引っかかった個所の行番号を表示する
-r: サブディレクトリ内にあるファイルも検索する
-v: <検索したい文字列>に一致しないものを表示する
-w: 完全に一致するものだけ表示する
--exclude="*.拡張子": 指定した拡張子は検索対象外にする
--include="*.拡張子": 指定した拡張子のみ検索対象にする
# <検索したい文字列>: 必須
途中でスペースなどを含む場合は「"文字列 文字列"」のようにダブルクォートで囲む。
# [ファイル名]: 任意(だけど必須に近い)
指定したファイル内だけを検索する。
基本的に「*(アスタリスク):すべてのファイルを検索対象」を指定すればOK。
検索対象を絞りたい(例えばhoge.txtファイルのみ)場合だけ、具体的なファイル名を指定する。
使用例
例1)カレントディレクトリ内のすべてのファイルを対象に、 hoge
で検索
$ grep hoge *
例2)カレントディレクトリ内のhoge.txt
ファイルを対象に、hoge
で検索
$ grep hoge hoge.txt
例3)サブディレクトリも含む全てのファイルも対象に、main
で完全一致するもの検索
$ grep -rw main *
例4)サブディレクトリも含む全てのファイルも対象に、main
を含まないものを検索
$ grep -rv main *
例5)サブディレクトリも含む全てのjsonとxmlファイル以外を対象に、color
で検索
$ grep -r --exclude="*.json" --exclude="*.xml" color *
PowerShell
コマンド形式
- カレントフォルダ内だけ検索
> Select-String -Path <ファイル名> -Pattern '<検索したい文字列>' [オプション]
# <ファイル名>について
指定したファイル内だけを検索する。
基本的に「*(アスタリスク):すべてのファイルを検索対象」を指定すればOK。
検索対象を絞りたい(例えばhoge.txtファイルのみ)場合だけ、具体的なファイル名を指定する。
# <検索したい文字列>について
ここに検索したいものを指定する。
必ず「シングルクォート([Shift] + [7])」で囲む。
# [オプション]
-Encoding: 文字コード(Shift_JISやUTF-8など)を指定する
-NotMatch: <検索したい文字列>に一致しないものを表示する
-Exclude <文字列>: ファイル名に <文字列> を含むものは、検索対象外にする
-Include <文字列>: ファイル名に <文字列> を含むものだけ、検索対象にする
- サブフォルダも含めて検索
> Get-ChildItem -Path <検索したいフォルダパス> -Filter <ファイル名> -Recurse | Select-String -Pattern '<検索したい文字列>'
# -Recurseについて
サブフォルダも検索対象に含める場合に付けます。
# <検索したいフォルダパス>
どこから検索を開始するのかを指定する。
カレントフォルダから検索: .(ドット)
ホームフォルダから検索: ~(チルダ)または $HOME
ルートフォルダから検索: /(スラッシュ)
# <ファイル名>について
上の「カレントフォルダ内だけ検索」と同じ。
# <検索したい文字列>について
上の「カレントフォルダ内だけ検索」と同じ。
使用例
例1)カレントディレクトリ内のすべてのファイルを対象に、 hoge
で検索
> Select-String -Path * -Pattern 'hoge'
例2)カレントディレクトリ内のhoge.txt
ファイルを対象に、hoge
で検索
> Select-String -Path hoge.txt -Pattern 'hoge'
例3)サブディレクトリも含む全てのファイルも対象に、main
を含むものを検索
> Get-ChildItem -Path ./* -Filter * -Recurse | Select-String -Pattern 'main'
例4)サブディレクトリも含む全てのファイルも対象に、main
を含まないものを検索
> Get-ChildItem -Path ./* -Filter * -Recurse | Select-String -Pattern 'main' -NotMatch
例5)サブディレクトリも含む全てのjsonファイル以外を対象に、color
で検索(複数ファイルは分からない)
> Get-ChildItem -Path ./* -Filter * -Recurse | Select-String -Pattern 'color' -Exclude *.json