我需要将来自不同命令的所有信息“转储”到bash中的文件中。当我在终端输入命令时,它显示格式非常好并且可读。例如,我有这个命令
ifconfig -a | grep "inet\|lo\|eth\|wlan"
我希望在我执行此操作的文件中输出
echo $(ifconfig -a | grep "inet\|lo\|eth\|wlan") >> filename.txt
但是当我打开 filename.txt 时,一切都是 像这样
eth0 Link encap:Ethernet HWaddr # inet addr:#Bcast:# Mask:# inet6 addr: # Scope:Link eth0:1 Link encap:Ethernet HWaddr # inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host
但我希望它看起来像这样的终端输出
eth0 Link encap:Ethernet
HWaddr #
inet addr:#
Bcast:#
Mask:#
inet6 addr: #
Scope:Link
eth0:1 Link encap:Ethernet
HWaddr #
inet addr:127.0.0.1
Bcast:127.255.255.255
Mask:255.0.0.0 lo Link
encap:Local
Loopback inet addr:127.0.0.1
Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
有可能吗?我一直在尝试使用sed命令用\ n替换“space”
例如sed "s/ /\n/#"
其中#表示要删除的空间,但这显然不是可行的方法。必须有另一种方式来达到我想要的目的。它不仅需要ifconfig命令我需要格式化。
答案 0 :(得分:3)
您正在做的事情可以通过以下方式完成:
ifconfig -a | grep "inet\|lo\|eth\|wlan" >> filename.txt
或
grep "inet\|lo\|eth\|wlan" <<<"$(ifconfig -a)" >> filename.txt
当前代码中“不同”输出的原因是因为所有空格都丢失了。如果你这样做:
echo "$(ifconfig -a | grep "inet\|lo\|eth\|wlan")" >> filename.txt
你不会有这个问题。