Ich habe eine große Liste mit Kontaktinformationen in einer TXT-Datei. Ich muss die Telefonnummern aus einer Struktur wie dieser entnehmen:
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