2015-06-15 57 views
1

我正在編寫一個腳本來匹配MMLS中的特定值(起始列)。正則表達式匹配來自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 

作爲新的正則表達式,我現在正則表達式的樣子:

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

與尾隨空格插槽,啓動和系統管路的結束如果我只想匹配Start列,那麼最好的方法是什麼?

限制:不會總是有7個插槽,尺寸會有所不同。

+0

你要哪列第二或第一?你正在運行哪個lang/tool? –

+0

因爲這實際上不需要一個正則表達式。 –

+0

@AvinashRaj我在Bash中匹配,目的是使用描述限定符將起始值賦給一個變量供以後使用。有沒有更好的方法來解決這個問題? – ImNotLeet

回答

1

匹配所有start列(#3):

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

RegEx Demo


更新:

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

只有當SYSTEM的上線發現匹配:如果正在運行在Ubuntu,你可以使用一個簡單的awk這樣的:

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

謝謝你的額外幫助和正則表達式回答 – ImNotLeet

1

如果你想這樣做只是使用awk

要打印任何我,您可以用awk爲做到這一點:

awk '{print $i}' 

如果您想選擇包含PATTERN特定行並打印其我列:

awk '/PATTERN/{print $i}' 

在這裏,在你的例子:

要完全打印start柱:

awk '{print $3}' 

輸出:

Start 
0000000000 
0000000000 
0000000001 
0000000002 
0000002048 
0001026048 
0001288192 
0625141760 

要打印含有SYSTEM線的start列值:

awk '/SYSTEM/{print $3}' 

輸出:

0000002048 
+0

謝謝你的詳細解釋,我真的很感激它! – ImNotLeet