在 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 的原因。