如何过滤文本,删除特定位置为空的行

如何过滤文本,删除特定位置为空的行
# lshw -c 网络-businfo
总线信息 设备类别 描述
=================================================== ======
pci@0000:03:00.0 enp3s0 网络 I210 千兆网络连接
pci@0000:04:00.0 mec_test_1 网络 I350 千兆网络连接
pci@0000:04:00.1 mec_test_2 网络 I350 千兆网络连接
pci@0000:04:00.2 mec_test_3 网络 I350 千兆网络连接
pci@0000:04:00.3 mec_test_4 网络 I350 千兆网络连接
pci@0000:b5:00.0 网络英特尔公司
pci@0000:b5:00.1 网络英特尔公司
pci@0000:b5:00.2 mec_test_5 网络 英特尔公司
pci@0000:b5:00.3 enp181s0f3 网络 英特尔公司

如果我想传递 Device 为空,该怎么做?喜欢

总线信息 设备类别 描述
=================================================== ======
pci@0000:03:00.0 enp3s0 网络 I210 千兆网络连接
pci@0000:04:00.0 mec_test_1 网络 I350 千兆网络连接
pci@0000:04:00.1 mec_test_2 网络 I350 千兆网络连接
pci@0000:04:00.2 mec_test_3 网络 I350 千兆网络连接
pci@0000:04:00.3 mec_test_4 网络 I350 千兆网络连接
pci@0000:b5:00.2 mec_test_5 网络 英特尔公司
pci@0000:b5:00.3 enp181s0f3 网络 英特尔公司

答案1

一种简单的方法是要求 grep 在第 19 列中查找非空格字符:

lshw -c network -businfo | grep -E '^.{18}[^ ]'

grep命令正在寻找锚定到行开头的模式;接下来是 18 个任意字符,然后是非空格的内容。

或者,如果那里有一个 TAB 而不是空格,请使用该类[:space:]

lshw -c network -businfo | grep -E '^.{18}[^[:space:]]'

相关内容