txt ファイルから数字を抽出する

txt ファイルから数字を抽出する

連絡先情報の大きなリストが txt ファイルにあります。次のような構造から電話番号を取得する必要があります。

例

出力にはテキスト内の数字のみを含める必要があります。例:

  • 4149611000
  • 4143620851
  • 3605966100
  • 3096949898

これを解決できるのは cmd のどのコマンドでしょうか?

答え1

要約perl -lne 'print $1 while /(\d{10})/g' filenames.txt ...


$ cat n.txt
aaaa 0123456789 bbbb
apple banana cucumber
9876543210 ccc ccc ccc
ppp qqq 12345 rrr sss
$ perl -lne 'print $1 if /(\d{10})/' n.txt
0123456789
9876543210

1 回線に複数の電話番号を設定でき、そのすべてが必要な場合:

$ echo double 1111111111 number 2222222222 here >> n.txt
$ perl -lne 'print $1 while /(\d{10})/g' n.txt
0123456789
9876543210
1111111111
2222222222

電話番号が常に5番目のカンマ区切りフィールドである場合は、

$ perl -F, -lne 'print $F[4]' m.txt 
PHONE
1234567890
0987654321

Perl のインデックスは 0 から始まります (0,1,2 であり、1,2,3 ではありません)。

または、よりシンプルなツールを使用します:

$ cut -d, -f5 m.txt
PHONE
1234567890
0987654321

上記は Windows 10 の WSL を使用して実行されましたが、ネイティブの Windows Perl は Windows 10 コマンド プロンプトで使用できます。次のようになります。

C> perl -lne "print $1 while /(\d{10})/g" n.txt
0123456789
9876543210
1111111111
2222222222

おそらくPowerShellでこれを行う方法はあるでしょう(ただし、おそらく入力は増えます)

答え2

Powershell を使用して、次のコマンドレットを試してください。

Get-Content -Path C:\path\to\yourfile.txt | Select-String "\d{10}" -AllMatches | ForEach {$_.Matches} | Select Value

または

Select-String -Path "C:\path\to\yourfile.txt" -Pattern "\d{10}" -AllMatches | Select -ExpandProperty Matches | Select Value

これにより、10 桁の長さの数字のみが表示されます。出力をファイルにしたい場合は、次のようにします。

Get-Content -Path C:\path\to\yourfile.txt | Select-String "\d{10}" -AllMatches | ForEach-Object {$_.Matches} | Select Value | Out-File output.txt

関連情報