使用 grep 验证电话列表
在我们之前的示例中,我们查看了单个电话号码并检查它们的格式是否正确。 一个更现实的场景是检查数字列表,所以让我们列一个列表。 我们将通过对命令行背诵魔法咒语来做到这一点。 这会很神奇,因为我们还没有涵盖大部分涉及的命令,但不要担心。 我们将在以后的章节中到达那里。 这是咒语:
[我@linuxbox ~]$ 对于 {1..10} 中的 i; do echo "(${RANDOM:0:3}) ${RANDO M:0:3}-${RANDOM:0:4}" >> phonelist.txt; 完毕
[我@linuxbox ~]$ 对于 {1..10} 中的 i; do echo "(${RANDOM:0:3}) ${RANDO M:0:3}-${RANDOM:0:4}" >> phonelist.txt; 完毕
此命令将生成一个名为 电话列表.txt 包含十个电话号码。 每次重复该命令时,都会将另外十个数字添加到列表中。 我们也可以改变值 10 在命令的开头附近生成更多或更少的电话号码。 但是,如果我们检查文件的内容,就会发现有一个问题:
[我@linuxbox ~]$ 猫电话列表.txt
(232) | 298-2265 |
(624) | 381-1078 |
(540) | 126-1980 |
(874) | 163-2885 |
(286) | 254-2860 |
(292) | 108-518 |
(129) | 44-1379 |
(458) | 273-1642 |
(686) | 299-8268 |
(198) | 307-2440 |
一些数字格式不正确,这对我们的目的来说是完美的,因为我们将使用
grep 来验证它们。
一种有用的验证方法是扫描文件中的无效数字并显示结果列表:
[我@linuxbox ~]$ grep -Ev '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$'
电话列表.txt (292) 108-518
(129) 44-1379
[我@linuxbox ~]$
[我@linuxbox ~]$ grep -Ev '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$'
电话列表.txt (292) 108-518
(129) 44-1379
[我@linuxbox ~]$
这里我们使用 -v 选项以生成反向匹配,以便我们仅输出列表中与指定表达式不匹配的行。 表达式本身在每一端都包含锚元字符,以确保数字两端都没有多余的字符。 与我们之前的电话号码示例不同,该表达式还要求括号出现在有效数字中。