Você está tentando obter dados estruturados no formulário:
aaa ...
...
...
!
Você precisa tornar o sed
ciente de que os blocos recuados são importantes. Uma maneira crua pode ser escrever um loop em sed
:
sed -n '
# Create a label named 'start'
:start
# If the line matches the beginning of a block,
# jump (branch) to the label named section
/aaa accounting exec default/ b section
# If we didn't branch, get the next line
n
# Jump back to the start label
b start
# The label named section
:section
# print the line
p
n
# Keep looping to section for the lines we need
/^ /,/!/ b section
# If we don't have any more lines to loop on,
# jump back to the beginning
b start
'
Em uma linha:
$ sed -n ':start; /aaa accounting exec default/ b section; n; b start; :section; p; n; /^ /, /!/ b section; b start' test.txt
aaa accounting exec default start-stop group tacacs+
aaa accounting exec default
action-type start-only
group tacacs+
!
aaa accounting exec default stop-only group tacacs+
Isso pode ser feito de maneira mais legível usando awk
, perl
ou python
, eu acho.