Wyjście Grep z wielu linii w ograniczonym środowisku powłoki

1

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
crazychris56
źródło
Użyj {} narzędzie kodu w edytorze StackExchange do oznaczania literalnego kodu i danych wyjściowych, które nie powinny być ponownie formatowane.
Barmar

Odpowiedzi:

1
cphaprob -ia list | grep -e "Name:" -e "state:"

zrobi.

glenn jackman
źródło
-1

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:

na niektórych liniach pojawiają się natychmiastowe słowa, takie jak limit czasu i czas od ostatniego raportu, którego nie chcę wyświetlić.

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.

Omnipresence
źródło
Uważam, że wynik jest trudny do zrozumienia dla każdego programisty, który przyjdzie później.
Raúl Salinas-Monteagudo