Точно это раздражало меня больше года, поэтому я сделал быстрый и грязный сценарий, чтобы сделать это. Надеюсь, это поможет другим?
Это ставит имена в очередь push / pop, но не индексирование меню, поэтому это может быть лучше, но я пошел настолько далеко, насколько мне было сложно.
gawk 'BEGIN {
l=0
menuindex= 0
stack[t=0] = 0
}
function push(x) { stack[t++] = x }
function pop() { if (t > 0) { return stack[--t] } else { return "" } }
{
if( $0 ~ /.*menu.*{.*/ )
{
push( $0 )
l++;
} else if( $0 ~ /.*{.*/ )
{
push( $0 )
} else if( $0 ~ /.*}.*/ )
{
X = pop()
if( X ~ /.*menu.*{.*/ )
{
l--;
match( X, /^[^'\'']*'\''([^'\'']*)'\''.*$/, arr )
if( l == 0 )
{
print menuindex ": " arr[1]
menuindex++
submenu=0
} else
{
print " " (menuindex-1) ">" submenu " " arr[1]
submenu++
}
}
}
}' /boot/grub/grub.cfg
Здесь вы можете увидеть захват экрана из моей коробки, показывая, что он работает