如何在 Linux 中使用 seq 生成数字序列

在 Linux 上,您可以找到几个具有不同寻常功能的命令。一个这样的命令是 seq,它根据指定的参数输出一系列数字。

但是,您可以使用向您抛出一堆数字的命令行实用程序做什么?您将在本指南中找到。

什么是 seq 命令?

如上所述,Linux 中的 seq 命令可以快速生成数字字符序列。用户可以将参数传递给命令以生成不同的数字组合。例如,您可以通过简单地向 seq 传递一个额外的参数来获得一个递增的列表。

但是该命令的实际用途是什么?虽然 seq 从整体上看可能不是一个强大的工具,但您可以通过使用其他 Linux 实用程序实现它来从该命令中受益。您还可以在bash 脚本中使用 seq 来展示其真正的威力。

如何在 Linux 中使用 seq

Seq 只需要几个参数,这使它成为任何人都易于学习的工具。

基本语法

命令的基本语法是:

 seq options numbers

…其中选项是您可以指定以调用命令的不同方法的标志,数字是您传递以生成数字序列的参数。

生成数字列表

Seq 参数遵循下面给出的输入格式:

 seq last
seq first last
seq first increment last

当您只指定一个数字时,seq 将其解释为列表的上限,并生成一个从 1 开始到指定数字的序列。

 seq 5

上述命令将输出以下内容:

 1
2
3
4
5

当 seq 接收两个数字作为输入时,它将它们解释为序列的下限和上限。要生成从 4 到 8 的数字列表:

 seq 4 8

输出:

 4
5
6
7
8

但是当您向命令传递三个数字时,它会将第二个参数解释为增量数字。例如:

 seq 3 2 13

上述命令将输出一个数字列表,从 3 到 13,增量为 2。

 3
5
7
9
11
13

在数字之间添加分隔符

默认情况下,seq 使用换行符作为列表的分隔符。这就是为什么列表中的每个数字都在单独的行上的原因。

您可以更改此默认行为并使用-s标志使用自定义分隔符。使用句点( . ) 字符作为分隔符:

 seq -s . 3 7

输出:

 3.4.5.6.7

请记住,某些字符如波浪号( ~ ) 必须用引号括起来。这是因为终端使用波浪号字符来表示/home目录,如果您不添加引号,这将反映在输出中。

 seq -s ~ 3 7

输出:

 3/home/4/home/5/home/6/home/7

另一方面,当你用引号包裹分隔符时:

 seq -s '~' 3 7

输出:

 3~4~5~6~7

调整输出格式

您还可以使用-f标志更改输出序列的格式。默认情况下,seq 从用户输入中提取格式样式。例如,如果您指定数字 0.1 和 0.5,则默认输出将采用浮点数格式。

 seq 0.1 0.5

输出:

 0.1
0.2
0.3
0.4
0.5

您可以使用各种转换规范(如 %a、%e、%f、%g、%A、%E、%F 和 %G)指定自定义输出格式。

如果您希望输出遵循浮点数格式,则可以使用%f说明符。

 seq-f %f 4 7

输出:

 4.000000
5.000000
6.000000
7.000000

要将精度修改为最多两位小数:

 seq -f %0.2f 4 7

输出:

 4.00
5.00
6.00
7.00

您还可以通过指定输出模板来完全转换输出。例如,要获取以192.168.5.x开头的所有 IP 地址的列表:

 seq -f 192.168.5.%g 1 233

输出:

要向输出添加填充,您可以使用-w标志。 -w标志根据指定的最大数字保持输出的宽度。

要生成 1 到 1,000 之间的数字序列,增量为 100,同时保持恒定宽度:

 seq -w 1 100 1000

输出:

 0001
0101
0201
0301
0401
0501
0601
0701
0801
0901

获取 seq 命令行帮助

虽然 seq 易于使用,但有时用户可能会觉得需要查看命令的手册页–help标志将显示 seq 手册页:

 seq --help

输出:

实际例子

如前所述,seq 主要与其他 Linux 命令一起使用,例如 touch 和 expr。

执行数学运算

如果您想快速添加或减去特定范围的数字,可以通过在expr 中使用 seq 轻松实现,这是一个 Linux 命令,将输入视为表达式并显示相应的输出。

将 1 到 100 之间的所有数字相加:

 expr `(seq -s " + " 1 100)`

seq 命令生成如下输出:

 1 + 2 + 3 + 4 + 5 + 6...

Expr 将其视为输入表达式并输出解决方案。

 5050

您可以通过简单地将 seq 命令中的分隔符替换为其他运算符来执行其他数学运算。

快速创建多个文件

如果您想在 Linux 上创建名称遵循类似模式的多个文件,您可以使用touch 命令和 seq 轻松完成。

例如,要创建 10 个名为file-x.txt 的文件,其中x是从 1 到 10 的数字:

 touch $(seq -f "file%g.txt" 1 10)

Touch 会在瞬间为您创建文件。

在脚本中实现 seq

考虑到您正在用 bash 编写像 Nmap 这样网络扫描仪工具,您可能想要获取网络中所有开放端口的列表。但是为此,您需要 ping 每个端口(总共 65535 个)并分析响应。

为了节省一些时间,您可以选择使用 seq 并生成可在脚本中使用的 IP 地址和端口组合列表。

假设您要获取 IP 地址为1.2.3.4的设备的所有端口的列表。这是生成所需输出的快速命令:

 seq -f 1.2.3.4:%g 1 65535

输出:

然后,您可以将此输出用作列表并遍历它,使用脚本检查每个端口并分析它是否打开。

seq 生成数字的速度有多快?

您可能会想,如果您可以在 bash 中使用 for 循环获得类似的结果,为什么要为任务选择 seq?这是因为 seq 的真正力量在于它的速度。 Seq 比在 Linux 上生成数字序列的任何其他命令都要快。

您甚至可以在 Linux 上使用 time 实用程序测试其速度。让我们看看 seq 从一个开始生成一百万个数字的列表需要多少时间。

 time seq 1000000

查看下面的输出,您可以看到 seq 只用了大约四秒钟就生成了一个包含一百万个数字的列表。

Linux 命令行的力量

Seq 并不是 Linux 中唯一专注于提供快速准确结果的工具。虽然您可以在 bash 中使用for 循环生成数字列表,但考虑到 seq 的速度确实非常快,这不是推荐的做法。

Linux 命令行使您可以更好地控制操作系统及其功能,这也是您今天应该开始通过 GUI 使用终端的原因。