在一行中从 `ifconfig` 打印多个 IP 地址

在一行中从 `ifconfig` 打印多个 IP 地址

我想在ifconfig一行中打印出多个 IP 地址。

这是我尝试使用grep, cut and awk

user@linux:~$ ifconfig | grep ad.*Bc
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet addr:10.1.1.1  Bcast:10.1.1.255  Mask:255.255.255.0
user@linux:~$ 

user@linux:~$ ifconfig | grep ad.*Bc | cut -d: -f2
192.168.1.1  Bcast
10.1.1.1  Bcast
user@linux:~$ 

user@linux:~$ ifconfig | grep ad.*Bc | cut -d: -f2 | awk '{ print $1}'
192.168.1.1
10.1.1.1
user@linux:~$ 

不幸的是,我能得到的最佳输出是

192.168.1.1
10.1.1.1

分两行。

是否有可能产生这样的输出?

192.168.1.1 , 10.1.1.1

答案1

您好,您可以尝试添加到|tr -s '\n' ','最后吗

这用逗号替换换行符。问题是没有尾随行,您可以在需要时追加。

答案2

只需使用输出记录分隔符( ) 作为awk 中的ORS逗号 ( ),

ifconfig | grep ad.*Bc | cut -d: -f2 | awk 'BEGIN{ORS=" , ";} {print $1}' | sed 's#, $##' &&  echo ""

答案3

echo $(ifconfig | grep -o 'addr:[^ ]*' | cut -f2 -d:) | sed 's/ /, /g'                               

grep -o仅输出与模式匹配的字符串。该cut命令删除addr:前缀(请注意,其他 Linux 版本(例如 Debian)具有不同的ifconfig输出,不遵循addr:该地址)。

通过$( ... )命令替换将每个“单词”作为 echo 的参数,将结果连接到一行中。

最后sed将每个空格替换为,.

答案4

你可以试试这个sed

ifconfig | sed -n '
  $ {
  x
  s/^.//
  s/\n/ , /
  p
}
/.*addr:/!b
  s///
  s/ .*//
  H'

保留所有带有“addr:”的行
删除所有内容,但将 IP 保留在保留空间中
最后,获取保留空间,格式化并打印。

相关内容