Pokaż tylko część pliku dziennika w skrypcie bash

-1

Dziennik OpenVPN wygląda następująco:

OpenVPN

CLIENT LIST
Updated,Sat Jun 20 04:20:07 2015
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
[ A .... ]
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
[ B.... ]
GLOBAL STATS
Max bcast/mcast queue length,33
END

Gdzie A i B powyżej są listami hostów sformatowanych w określony sposób.

Mam skrypt bash, którego użyję do działania na elementach o nazwie „TABELA TRASY” ( B ). Jak mogę skutecznie oddzielić tę listę hostów od reszty dokumentu w skrypcie?

Lennart Rolland
źródło

Odpowiedzi:

1

Możesz użyć sed, aby usunąć (d) linie z linii 1 do pasującej linii początkowej. Następnie usuń linie z pasującej linii końcowej do ostatniej linii ($). Prawdopodobnie chcesz również usunąć wiersz nagłówka „Adres wirtualny”. Pozostało ci tylko to, czego chcesz!

sed '1,/^ROUTING TABLE/d
     /^Virtual Address,/d
     /^GLOBAL STATS/,$d'
meuh
źródło
To było dla mnie najbardziej sensowne, więc dostajesz głos.
Lennart Rolland
1

Następujące polecenie sed

      sed -n '/ROUTING/,/\[ B/{p}' filename

robi to, co chcesz: -n pomija domyślne zachowanie, które polega na wypisywaniu każdej linii, wyrażenie między pojedynczymi cudzysłowami wybiera zakres linii, a następnie je drukuje (to znaczy {p} ). Zakresy, które należy wybrać, są identyfikowane za pomocą dopasowań (początkowego i końcowego) rozdzielonych separatorami, w moim przypadku /jako separatora używam ukośnika ; dopasowanie wzorca początkowego i końcowego musi być oddzielone przecinkiem, a \ [ służy do podkreślenia dosłownego znaczenia nawiasu kwadratowego, tzn. nie jest to struktura gramatyczna, lecz prawdziwy kwadrat otwierający, który należy znaleźć.

MariusMatutiae
źródło