web-dev-qa-db-ja.com

Linux seqコマンドでIPアドレスの範囲を印刷する方法

「seq」コマンドを使用してLinuxコマンドラインでIPアドレスの範囲を印刷するにはどうすればよいですか?例:10.0.0.1から10.0.0.23の範囲のipを出力するためにseqが必要です。オクテット間のピリオドのように見えるので、数値は浮動小数点のように動作します。 「無効な浮動小数点引数エラー」が発生します。 -fオプションを使ってみました。正しく使用していない可能性があります。しかし、それでもエラーが発生しました。私はに似たものにしようとしています

seq 10.0.0.2 10.0.0.23

Excelに切り替える以外に、Linuxの範囲のIPアドレスを印刷する別の方法はありますか?

8
user2476714

次の形式を使用します。

$ 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はmanページを書きたくないので、残念ながらこれは自明ではありません。

22
Michael Hampton

範囲またはCIDRからIPリストを生成する pripsユーティリティ があります。広い範囲での作業に役立ちます:

$ 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
11
user4151603

Sedコマンドをseqとともに使用して、IPアドレスの範囲を出力できます。

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

またはechoとtrを使用

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

printfコマンドは、変換指定子よりも多くの引数が指定されている場合、暗黙の反復を実行します。例えば:

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

2つの変換がありますが、6つの引数があります。したがって、フォーマットロジックが3回繰り返され、引数をペアで行進します。

これで、次のことができます。

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

printfコマンドとその繰り返し動作は次のとおりです POSIX標準 "フォーマットオペランドは、引数のオペランドを満たすために必要なだけ再利用する必要があります。 "一方、seqコマンドはそうではありません。

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

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}"
}

これには、範囲内のネットワークアドレスとブロードキャストアドレスが含まれることに注意してください。問題がある場合は、結果から最初と最後のアドレスを削除します。

2
Alex Harvey