如何使用Linux seq命令打印IP地址范围


8

如何使用“ seq”命令在linux命令行上打印一系列IP地址?例如:我需要seq打印从10.0.0.1到10.0.0.23的ip范围。好像八位字节之间的句点使数字表现得像浮点数。我收到“无效的浮点参数错误”。我尝试使用-f选项。可能是我没有正确使用它。但这仍然给我一个错误。我正在尝试类似

seq 10.0.0.2 10.0.0.23

除了切换到excel以外,还有其他方法可以打印Linux范围内的IP地址吗?


5
使用时bash,可以使用打印该地址范围echo 10.0.0.{2..23}。该{..}构造称为支撑扩展。
2014年

Answers:


22

使用格式:

$ seq -f "10.20.30.%g" 40 50
10.20.30.40
10.20.30.41
10.20.30.42
10.20.30.43
10.20.30.44
10.20.30.45
10.20.30.46
10.20.30.47
10.20.30.48
10.20.30.49
10.20.30.50

不幸的是,这并不明显,因为GNU不喜欢编写手册页。


2
我认为最好参考他们提供的手册,而不是仅注意手册页过于简短。请参阅info coreutils 'seq invocation'
哈坎·林奎斯特

1
@HåkanLindqvist我讨厌,绝对讨厌GNU信息。更不用说那里%g也没有记录。您必须寻找正确的printf信息页面。
迈克尔·汉普顿

2
绝对地,man 3 printf在读者不熟悉printf格式字符串的情况下,引用也是一个好主意。就是说,我也不是他们使用texinfo的忠实拥护者,但这只是我的建议,通过使用确实存在的文档来改善您的答案,而不仅仅是指出缺少特定格式的文档。
哈坎·林奎斯特

11

有一个prips实用程序可从范围或CIDR生成IP列表。对于大范围工作很有用:

$ prips 10.0.0.20 10.0.0.23
10.0.0.20
10.0.0.21
10.0.0.22
10.0.0.23

$ prips 10.0.0.0/23
10.0.0.0
10.0.0.1
10.0.0.2
<...>
10.0.1.254
10.0.1.255

8

您可以将sed命令与seq一起使用以打印IP地址范围。

seq 2 23 | sed 's/^/10.0.0./'

或使用echo和tr

echo 10.0.0.{2..23} | tr ' ' '\n'

3

printf如果给该命令的参数多于转换说明符,则该命令将执行隐式迭代。例如:

$ printf "%s-%s\n" 1 2 3 4 5 6
1-2
3-4
5-6

有两次转换,但有六个参数。因此,发生了格式逻辑的三个重复,成对地遍历了参数。

这样我们可以做到:

printf "10.0.0.%s\n" $(seq 1 23)

printf命令及其重复行为是POSIX标准“格式操作数应根据需要满足参数操作数的使用频率。 另一方面,seq命令不是。


3
for i in $(seq 2 23); do echo "10.0.0.$i"; done

@don_crissti,为什么?
user163009

“为什么”呢?
don_crissti

编辑和否决?
user163009

我不是拒绝投票的人-最有可能是系统自动对您的答案进行了投票。我只审核(编辑)。至于为什么编辑?好吧,因为它是代码,应该正确格式化。
don_crissti

2

如果我们删除了使用seq命令的要求,并假定该ipcalc命令可用,而Ubuntu prips命令不可用,那么prips可以将其实现为Bash shell函数:

prips() {
  cidr=$1

  # range is bounded by network (-n) & broadcast (-b) addresses.
  lo=$(ipcalc -n $cidr |cut -f2 -d=)
  hi=$(ipcalc -b $cidr |cut -f2 -d=)

  read a b c d <<< $(echo $lo |tr . ' ')
  read e f g h <<< $(echo $hi |tr . ' ')

  eval "echo {$a..$e}.{$b..$f}.{$c..$g}.{$d..$h}"
}

请注意,这将包括该范围内的网络地址和广播地址;如果有问题,请从结果中删除第一个和最后一个地址。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.