LoginSignup
4
3

More than 3 years have passed since last update.

ファイル内の文字列検索【BashとPowerShellの比較】

Last updated at Posted at 2020-08-18

BashとPowerShellのコマンド対応表に戻る

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_JISUTF-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
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3