Я выполняю эту команду:
mccli group show-members --name=/$vcenter_name/VirtualMachines/$i | tail -n +4
Вывод:
/vcenter-prod.happycow.local/VirtualMachines/Backup With Space Normal /vcenter-prod.happycow.local/VirtualMachines/Active Directory Virtual Machine
/vcenter-prod.happycow.local/VirtualMachines/Backup With Space Normal /vcenter-prod.happycow.local/VirtualMachines/VM-Replicate Virtual Machine
Что я хотел бы извлечь из этого вывода, это Active Directory
и VM-Replicate
Обратите внимание, что этот вывод может меняться от среды к среде, и у нас может быть больше места в требуемом поле, например: New Virtual Machine
Another New Virtual Machine
NoSpaceHere
Так что моя мысль была grep для второго случая конкретной строки VirtualMachines
, так как VirtualMachines
находится там же в начале строки.
Затем, как только второе VirtualMachines
сопоставлено, выведите все после этого совпадения только в этой строке, но исключите последние два столбца, которые являются Virtual
и Machine
, так как это всегда константа.
Не могу понять синтаксис для этого, хотя. Какие-либо предложения?
Вот мой sed
решение для Вашего вывода:
$ ... | sed -r 's:.*/(.*)Virtual Machine$:\1:'
Active Directory
VM-Replicate
.*/
взгляды от запуска до последнего /
:
/vcenter-prod.happycow.local/VirtualMachines/Backup With Space Normal /vcenter-prod.happycow.local/VirtualMachines/
Затем мы ищем что-либо прежде Virtual Machine
использование (.*)Virtual Machine$
и заменяем целую строку этим что-либо
Начиная с GNU grep имеет режим PCRE, вероятно, самый простой способ получить содержание после того, как соответствие будет состоять в том, чтобы использовать жемчуг \K
модификатор, например, жадно соответствовать всему до последнего /
и отбрасывать его:
$ cat output | grep -Po '.*/\K.*'
Active Directory Virtual Machine
VM-Replicate Virtual Machine
Для удаления запаздывающей части можно добавить, что явное смотрит вперед :
$ cat output | grep -Po '.*/\K.*(?=Virtual Machine)'
Active Directory
VM-Replicate