Help us understand the problem. What is going on with this article?

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

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
karakuri-t910
フリーランス時代も含めて6年近くIT業界にいましたが、今はITやプログラミングとは関係ない仕事をしています。 IT業界で働いていた時は、組込み系、5G、機械学習、画像処理をやってました。 今は趣味でやっており、C言語が一番得意です。 田舎でゆっくりスローライフしたい20代です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした