我想在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 保留在保留空间中
最后,获取保留空间,格式化并打印。