Я получил эту схему:

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

Регулярное выражение, которое я ищу, - это удалить то, что находится между двумя пробелами.

так как я могу достичь предыдущего результата с помощью "сед"?

Благодарю.

2 ответа2

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

как третье слово также "между пробелами"

1

Если вы хотите получить конкретный ответ, используя sed, то ответ, данный Eugen Rieck , идеален.

Другим решением проблем выбора данных на основе пробела в качестве разделителя будет использование awk :

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

Это оставит 2-й столбец и напечатает три других с пробелом, как показано ниже:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .