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

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

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

什么是 seq 命令?

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

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

如何在 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

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

seq 3 2 13

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

3
5
7
9
11
13

在数字之间添加分隔符

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

您可以更改此默认行为并使用自定义分隔符 -s 旗帜。 要使用 时期 (.) 字符作为分隔符:

seq -s . 3 7

输出:

3.4.5.6.7

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

seq -s ~ 3 7

输出:

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

另一方面,当您用引号括起分隔符时:

seq -s '~' 3 7

输出:

3~4~5~6~7

调整输出格式

您还可以使用 -F 旗帜。 默认情况下,seq 从用户输入中提取格式样式。 为了 example,如果您指定数字 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

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

seq -f 192.168.5.%g 1 233

输出:

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

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

seq -w 1 100 1000

输出:

0001
0101
0201
0301
0401
0501
0601
0701
0801
0901

获取 seq 命令行帮助

虽然 seq 易于使用,但有时用户可能会觉得需要查看该命令的手册页。 这 – 帮助 flag 将显示 seq 手册页:

seq --help

输出:

实际例子

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

执行数学运算

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

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

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

seq 命令生成如下输出:

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

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

5050

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

快速创建多个文件

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

为了 example创建 10 个文件名 文件-x.txt, 在哪里 X 是一个从 1 到 10 的数字:

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

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

在脚本中实现 seq

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

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

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

seq -f 1.2.3.4:%g 1 65535

输出:

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

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

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

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

time seq 1000000

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

Linux 命令行的力量

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

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