2015-06-15 3 views
1

Я пишу скрипт для соответствия определенному значению (начальный столбец) из MMLS.Regex Matching Второй столбец из команды MMLS в Bash

Выход аналогичен:

#  Slot Start  End   Length  Description 
#00: Meta 0000000000 0000000000 0000000001 Safety Table 
#01: ----- 0000000000 0000002047 0000002048 Unallocated 
#02: Meta 0000000001 0000000001 0000000001 GPT Header 
#03: Meta 0000000002 0000000033 0000000032 Partition Table 
#04: 00  0000002048 0001026047 0001024000 SYSTEM 
#05: 01  0001026048 0001288191 0000262144 Microsoft reserved partition 
#06: 02  0001288192 0625141759 0623853568 Windows 
#07: ----- 0625141760 0625142447 0000000688 Unallocated 

Будучи новым для регулярных выражений, мой текущий Regex выглядит следующим образом:

[^ ]+\s+[^](?=\s.*SYSTEM) 

который соответствует Slot, Start и End линии SYSTEM с конечными пробелами , если бы я хотел только сопоставить столбец «Старт», какой будет лучший подход?

Ограничения: не будет 7 слотов и размеры будут различаться.

+0

Какой столбец вы хотите второй или первый? И какой lang/tool вы используете? –

+0

Потому что на самом деле не нужно регулярное выражение. –

+0

@AvinashRaj Я согласен в Bash с намерением присвоить начальное значение с помощью квалификатора описания переменной для последующего использования. Есть ли лучший способ приблизиться к этому? – ImNotLeet

ответ

1

Чтобы соответствовать всем start столбцов (# 3):

/^(?:\S+\s+){2}(\S+)/gm 

Чтобы соответствовать только тогда, когда SYSTEM находится на линии:

/^(?:\S+\s+){2}(\S+)(?=\s.*SYSTEM)/gm 

RegEx Demo


Update: Если вы работаете В Ubuntu вы можете использовать простой AWK так:

awk '/SYSTEM/{print $3}' file 
0000002048 
+1

Спасибо за дополнительную помощь и ответ регулярного выражения – ImNotLeet

1

Если вы хотите сделать это просто используя awk:

Для печати любого я го, вы можете сделать это с помощью AWK как:

awk '{print $i}' 

Если вы хотите, чтобы выбрать конкретную строку, содержащую PATTERN и распечатать его I я колонка:

awk '/PATTERN/{print $i}' 

Здесь в вашем примере:

Чтобы полностью напечатать start колонки:

awk '{print $3}' 

Выход:

Start 
0000000000 
0000000000 
0000000001 
0000000002 
0000002048 
0001026048 
0001288192 
0625141760 

Чтобы напечатать значение start столбца строки, содержащей SYSTEM:

awk '/SYSTEM/{print $3}' 

Выход:

0000002048 
+0

Благодарим вас за подробное объяснение, я действительно ценю это! – ImNotLeet