У меня есть вывод команды diskpart:
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
Volume 0 D DVD-ROM 0 B No Media
Volume 1 C OSDisk NTFS Partition 232 GB Healthy Boot
Volume 2 BDEDrive NTFS Partition 300 MB Healthy System
Я хочу записать каждый из них в отдельную переменную, поэтому первым делом я хотел сделать что-то вроде ($ volume, $ ltr, ..., $ info) = $ line = ~ ((\ w + \ s \ d +) \ s + ([AZ])? ...
Проблема, с которой я столкнулся, заключается в том, что нет ничего уникального между Label, FS и Type, поэтому, если я использую (\w+)\s+
в каждом из этих столбцов, есть вероятность, что Label не существует, но FS существует, и, таким образом, файловая система неправильно читает в $ label.
Я не слишком уверен, смогу ли я сделать это с помощью регулярных выражений, но я открыт для предложений! Вместо этого я собирался пойти в новом направлении и просто разделить строку на основе индексов, начинающихся с - и заканчивающихся - . Если я вытащил все эти индексы, какой лучший способ разбить эту строку на соответствующие им подстроки Perl?
Я посмотрел на substr и попытался передать ему несколько индексов, например ($a,$b,$c) = substr('abcd', 1,2,3);
, но это просто привело к тому, что $ a было разделено между 2,3
Есть ли какое-нибудь элегантное решение для этого, кроме простого разбиения всего на одну строку за раз?