Przeszukiwałem sieć w poszukiwaniu sposobów przeszukiwania wielu linii wyjściowych, a następnie drukowałem linie zawierające ciągi, na których mi zależy. W rzeczywistości uruchamiam to na zaporze kontrolnej, a polecenie jest następujące: lista cphaprob -ia kiedy wykonuję, otrzymuję różne linie wyjścia. (poniżej). To, co próbowałem zrobić, to grep, sed lub pcregrep wyjście polecenia, aby zwrócić tylko niektóre części. Myślałem, że mogę wyeksportować wartość pozycji „x” za pomocą awk, a następnie wydrukować własne polecenie echo za pomocą zmiennej. Ale najpierw muszę mieć tylko te wiersze, na których mi zależy. Chcę wydrukować linie, które pokazują nazwę urządzenia i „stan”. Wolałbym zrobić to w linii zamiast wyprowadzać wartości do pliku i uruchamiać polecenie przeciwko niemu. Coś na wzór
lista cphaprob -ia | grep Name | stan grep
Wiem, że powyższy przykład nie zadziała z różnych powodów, ale wyraża to, co próbuję zrobić. Chcę wydrukować powłokę w ładnym formacie w następującej formie:
Nazwa urządzenia: x
Aktualny stan: y
i nic więcej. na niektórych liniach pojawiają się natychmiastowe słowa, takie jak limit czasu i czas od ostatniego raportu, którego nie chcę wyświetlać.
Nie mogę używać Perla.
Czy ktoś ma sugestię?
P.S., poniższe dane są w rzeczywistości w różnych liniach, ale nie mogę uzyskać danych wyjściowych na tej stronie, aby wyświetlić je jako osobne linie. Na przykład Nazwa urządzenia: Powiadomienie o problemie Bieżący stan: OK to właściwie dwie linie. Bieżący stan to następny wiersz. Podobnie dla reszty wyjścia.
[Expert@firewall:0]# cphaprob -ia list
Built-in Devices:
Device Name: Problem Notification
Current state: OK
Device Name: Interface Active Check
Current state: OK
Device Name: HA Initialization
Current state: OK
Device Name: Load Balancing Configuration
Current state: OK
Device Name: Recovery Delay
Current state: OK
Registered Devices:
Device Name: Synchronization
Registration number: 0
Timeout: none
Current state: OK
Time since last report: 60485.9 sec
Device Name: Filter
Registration number: 1
Timeout: none
Current state: OK
Time since last report: 60484.8 sec
Device Name: cphad
Registration number: 2
Timeout: none
Current state: OK
Time since last report: 437745 sec
Device Name: fwd
Registration number: 3
Timeout: none
Current state: OK
Time since last report: 2.76118e+06 sec
Device Name: routed
Registration number: 4
Timeout: none
Current state: OK
Time since last report: 60478.4 sec
{}
narzędzie kodu w edytorze StackExchange do oznaczania literalnego kodu i danych wyjściowych, które nie powinny być ponownie formatowane.Odpowiedzi:
zrobi.
źródło
Może to działać, chociaż w zależności od danych wyjściowych może dać ci kilka dodatkowych dopasowań, których nie chcesz (na przykład pasuje do tych samych słów i statusu)
cphaprob -ia list | grep "[Ns][at][ma][et]e\?"
Nie jestem pewien, co masz na myśli, mówiąc:
Jeśli masz na myśli, że istnieją linie z innymi informacjami, których nie chcesz, to powyższe powinny usunąć te informacje. Jeśli masz na myśli, że czasami występują dodatkowe informacje w tej samej linii co Nazwa urządzenia lub stan bieżący, a nie chcesz, aby te informacje były wyświetlane, konieczne będzie dodatkowe formatowanie.
źródło