Zahlen aus der TXT-Datei extrahieren

Zahlen aus der TXT-Datei extrahieren

Ich habe eine große Liste mit Kontaktinformationen in einer TXT-Datei. Ich muss die Telefonnummern aus einer Struktur wie dieser entnehmen:

Beispiel

Ich bräuchte eine Ausgabe, die nur Zahlen im Text enthält, zum Beispiel:

  • 4149611000
  • 4143620851
  • 3605966100
  • 3096949898
  • usw.

Welcher Befehl in der Eingabeaufforderung könnte das Problem beheben?

Antwort1

tl;drperl -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

Wenn pro Leitung mehrere Telefonnummern möglich sind und Sie alle möchten:

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

Wenn die Telefonnummer immer das 5. Komma-getrennte Feld ist, könnten Sie verwenden

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

Beachten Sie, dass Perl 0-basierte Indizes hat (0,1,2, nicht 1,2,3).

Oder verwenden Sie einfachere Tools:

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

Das Obige wurde mit WSL unter Windows 10 durchgeführt, aber natives Windows Perl ist für die Windows 10-Eingabeaufforderung verfügbar. So:

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

Es gibt mit ziemlicher Sicherheit eine Möglichkeit, dies in Powershell zu tun (allerdings wahrscheinlich mit mehr Tipparbeit verbunden).

Antwort2

Versuchen Sie mithilfe von Powershell die folgenden Cmdlets:

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

ODER

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

Dadurch werden nur Zahlen mit 10 Ziffern angezeigt. Wenn Sie die Ausgabe in einer Datei wünschen:

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

verwandte Informationen