![如何使用 sed 删除两个空格或空白之间的内容?](https://linux22.com/image/1553363/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sed%20%E5%88%A0%E9%99%A4%E4%B8%A4%E4%B8%AA%E7%A9%BA%E6%A0%BC%E6%88%96%E7%A9%BA%E7%99%BD%E4%B9%8B%E9%97%B4%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%9F.png)
我得到了这个模式:
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