需要将 bash 变量中存储的 IP 地址分解为八位字节
我有一个包含 IP 地址的 bash 变量(没有 CIDR 或任何东西,只有四个八位字节)。
我需要将该变量分成四个单独的八位字节,如下所示:
$ip = 1.2.3.4;
$ip1 = 1
$ip2 = 2
# etc
这样我就可以在 sed 中转义句点。有更好的方法吗? awk 是我要找的吗?
i've got a bash variable that contains an IP address (no CIDR or anything, just the four octets).
i need to break that variable into four separate octets like this:
$ip = 1.2.3.4;
$ip1 = 1
$ip2 = 2
# etc
so i can escape the period in sed. is there a better way to do this? is awk what i'm looking for?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
你可以使用 bash。这是一个单行代码,假设您的地址位于
$ip
中:它的工作原理是仅为一个命令设置“内部字段分隔符”,将其从通常的空格分隔符更改为句点。
read
命令将遵循它。You could use bash. Here's a one-liner that assumes your address is in
$ip
:It works by setting the "internal field separator" for one command only, changing it from the usual white space delimiter to a period. The
read
command will honor it.如果您想将每个八位字节分配给它自己的变量,而不使用数组或带有换行符的单个变量(这样您可以轻松地通过 for 循环运行它),您可以使用
#
和%
修饰符${x}
如下所示:请参阅此 /wiki/Bash:_Append_to_array_using_while-loop
以及本文中的更多内容。
If you want to assign each octet to its own variable without using an array or a single variable with newline breaks (so you can easily run it through a for loop), you could use
#
and%
modifiers to${x}
like so:See this /wiki/Bash:_Append_to_array_using_while-loop
and more in this article.
您可以使用内置的
set
来分割字符串,并使用IFS
作为分隔符(通常是空格和制表符)。如果您只需要反斜杠转义点,请使用字符串替换 - bash 有
${ip//./\\.}
You can split strings using the
set
built-in, withIFS
as separator (normally space and tab).If you just need to backslash-escape the dots, use string substitution - bash has
${ip//./\\.}
当我想做同样的事情时,我在另一个网站上找到了这段代码。非常适合我的应用程序。
This code is something that I found on another site when I was looking to do the same thing. Works perfectly for my application.
更简单的方法是使用 AWK:
The easier way is using AWK: