![PowerShell を使用してテキスト ファイルをクリーンアップする](https://rvso.com/image/668805/PowerShell%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E3%81%99%E3%82%8B.png)
これに苦労しており、誰か助けてもらえないかと思っています。余分なデータが含まれている大きなテキスト ファイルがあり、それを削除したいと考えています。入力ファイルのサンプルを以下に示します。
Text In Page - 1
S
Dept
l<m RKB)
"1915
slightly 234234
"sil dsf 56
"gr
gl
1920 100
1925 100
1930 100 Cls
"1935 100 Cl
Text In Page - 2
l<m RKB)
"1915
slightly
"sil
"gr
glauc
1920 100
1925 100
1930 100 Cls
"1935 100 Cl
以下を削除したいです:
- 空白行
- 行頭の「」
- 文字AZ、azで始まる行
上記の例の場合、
1915
1920 100
1925 100
1930 100 Cls
1935 100 Cl
1915
1920 100
1925 100
1930 100 Cls
1935 100 Cl
答え1
考えています:
(gc D:\test.txt) -replace '^"' | sls '\S' | sls -NotMatch '^[A-Za-z]' | sc out.txt
それは次のようになります:
- ファイルの行を取得し、最初の文字が引用符の場合は何もない文字に置き換えます。
- 「空白ではない」に一致する行を選択します(つまり、空行は除外されます)
- A-Za-zで始まらない行を選択する
- 結果をout.txtに書き込む
パイプラインでチェーン処理することと変数を何度も操作することのどちらを好むかに応じて、長いバージョンを書く方法はさまざまですが、次のようにします。
$lines = Get-Content D:\test.txt
$lines = $lines -replace '^"'
$lines = $lines | Select-String '\S'
$lines = $lines | Select-String -NotMatch '^[A-Za-z]'
$lines | Set-Content out.txt