PowerShellメモ

現在のフォルダから、全てのテキストファイルを検索し、「(任意の文字列1):(任意の文字列2)」*1と記述されている行を見つけ、その行内の「任意の文字列2」がlist.datの行として登録されていない場合、そのファイル名、行数、行の内容を出力するコマンドを1行で書いて見た。
ちなみに、予定されていないタグ名の検出に使用している。

ls *.txt | %{$name = $_.Name; $line=0; cat $name} | ?{ $line++; $_ -match '.*:(.*)' } | ?{ $find = $false; cat list.dat | ?{ $_ -eq $matches[1]} | %{ $find = $true }; -not $find } | %{'[{0}:L{1:00000}]:[{2}]' -f $name, $line, $_ }

"cat list.dat | ?{ $_ -eq $matches[1]} | %{ $find = $true }"が一応ポイントで、1行でもwhere区を通れば$find=$trueに指定される。ここをもう少し綺麗に書きたいんだけれど、何か無いかな・・・


しかし、PowerShell楽しいなぁ。

*1:すなわち、全角コロンが含まれている行