Grep содержимое после второго экземпляра, исключить последние два слова / столбца

Я выполняю эту команду:

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, так как это всегда константа.

Не могу понять синтаксис для этого, хотя. Какие-либо предложения?

1
задан 3 August 2017 в 01:37

2 ответа

Вот мой 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$ и заменяем целую строку этим что-либо

2
ответ дан 3 August 2017 в 11:37

Начиная с 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
2
ответ дан 3 August 2017 в 11:37

Другие вопросы по тегам:

Похожие вопросы: