我正在编写一个脚本来匹配MMLS中的特定值(起始列)。
输出类似于:
# 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列什么是最好的方法,那么SYSTEM行的Slot,Start和End与尾随空格匹配?
约束:不会总是有7个插槽,尺寸会有所不同。
答案 0 :(得分:1)
匹配所有start
列(#3):
/^(?:\S+\s+){2}(\S+)/gm
仅在行上找到SYSTEM
时匹配:
/^(?:\S+\s+){2}(\S+)(?=\s.*SYSTEM)/gm
更新:如果在Ubuntu中运行,您可以使用这样的简单awk:
awk '/SYSTEM/{print $3}' file
0000002048
答案 1 :(得分:1)
如果您只想使用awk
:
要打印任何i th ,您可以使用awk as:
来执行此操作awk '{print $i}'
如果要选择包含PATTERN
的特定行并打印其i th 列:
awk '/PATTERN/{print $i}'
在您的示例中:
完全打印start
列:
awk '{print $3}'
输出:
Start
0000000000
0000000000
0000000001
0000000002
0000002048
0001026048
0001288192
0625141760
打印包含start
的行的SYSTEM
列值:
awk '/SYSTEM/{print $3}'
输出:
0000002048