如何使用 sed 删除两个空格或空白之间的内容?

如何使用 sed 删除两个空格或空白之间的内容?

我得到了这个模式:

ethernet-em1     016f2bbf-3268-4229-a25b-c7f94b6e52dc  802-3-ethernet  em1
virbr0           4fc0e260-b21a-4a9d-a74d-3ec9f124976f  bridge          virbr0

我想要的是得到这个:

ethernet-em1    802-3-ethernet  em1
virbr0          bridge          virbr0

我正在寻找的正则表达式是删除两个空白之间的内容。

那么如何使用“sed”达到之前的结果?

谢谢。

答案1

因为您想要排除的是 UUID,所以您只需排除它和它之前的空格即可:

sed 's/\s\s*[0-9a-f-]*//'

甚至

sed 's/\s\s*[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*//'

删除“空格之间的所有内容”是通过

 sed 's/\(\s\s*\)[^\s][^\s]*\(\s\)/\1\2/'

但会产生不同的结果:它将输出

 ethernet-em1      em1
 virbr0            virbr0

因为第三个单词也是“在空格之间”

答案2

如果您想要使用的具体答案sed然后答案给出尤金里克是完美的。

解决根据空格作为分隔符选择数据问题的另一种方法是使用awk

awk -F' ' '{print $1" "$3" "$4}'

这将保留第二列并打印其他三列和空格,如下所示:

ethernet-em1    802-3-ethernet  em1
virbr0          bridge          virbr0

相关内容