我在 txt 文件中有一个很大的联系信息列表。我需要从如下结构中获取电话号码:
我需要输出仅包含文本中的数字,例如:
- 4149611000
- 4143620851
- 3605966100
- 3096949898
- ETC。
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
如果每行可以有多个电话号码并且您确实想要所有电话号码:
$ 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 10 命令提示符可以使用原生 Windows Perl。如下所示:
C> perl -lne "print $1 while /(\d{10})/g" n.txt
0123456789
9876543210
1111111111
2222222222
几乎可以肯定有一种方法可以在 powershell 中执行此操作(尽管可能需要输入更多内容)
答案2
使用 Powershell,尝试以下 cmdlet:
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