1. ホーム
  2. powershell

[解決済み] PowerShellでファイルを一行ずつ読み込む

2022-03-02 21:04:19

質問

PowerShellでファイルを一行ずつ読み込みたい。具体的には、ファイルをループして、ループ内で各行を変数に格納し、その行に対して何らかの処理を行いたいと考えています。

Bashと同等のものを知っています。

while read line do
    if [[ $line =~ $regex ]]; then
          # work here
    fi
done < file.txt

PowerShellのループに関するドキュメントがあまりない。

どのように解決するのですか?

<ブロッククオート

PowerShellのループに関するドキュメントがあまりない。

PowerShellのループに関するドキュメントは豊富で、以下のヘルプトピックをチェックするとよいでしょう。 about_For , about_ForEach , about_Do , about_While .

foreach($line in Get-Content .\file.txt) {
    if($line -match $regex){
        # Work here
    }
}

この問題に対するPowerShellのもう一つのイディオム的な解決策は、テキストファイルの行をパイプラインで ForEach-Object コマンドレット :

Get-Content .\file.txt | ForEach-Object {
    if($_ -match $regex){
        # Work here
    }
}


ループ内で正規表現マッチングを行う代わりに、行をパイプでつなぐことができます。 Where-Object を使えば、興味のあるものだけをフィルタリングすることができます。

Get-Content .\file.txt | Where-Object {$_ -match $regex} | ForEach-Object {
    # Work here
}