我得到了这个模式:
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