debian bash script suche zwei Werte in einer Zeile

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

debian bash script suche zwei Werte in einer Zeile

Beitrag von joe2017 » 25.11.2024 10:53:07

Hallo zusammen,

ich habe folgende csv Datei:

Code: Alles auswählen

Server;IP;online
Server;IP;online
Server;IP;offline
WLAN;IP;offline
WLAN;IP;online
USV;IP;online
USV;IP;offline
Drucker;IP;online
Drucker;IP;offline
aktuell prüfe ich ob der wert Offline in der Datei vorkommt und reagiere darauf.

Code: Alles auswählen

if grep -wq "offline" /path/to/file.csv; then
my doing
fi
Das funktioniert soweit.
Jetzt möchte ich jedoch nur auf die Datei reagieren, wenn einer der Werte (Server,WLAN,USV, oder ander) und offline in einer Zeile steht
Die Zeilen welche Drucker beinhalten möchte ich ignorieren.

Hat jemand eine Idee wie ich das anpassen kann?
Zuletzt geändert von joe2017 am 25.11.2024 12:16:06, insgesamt 1-mal geändert.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: debian bash script suche zwei Werte in einer Zeile

Beitrag von tobo » 25.11.2024 12:04:27

joe2017 hat geschrieben: ↑ zum Beitrag ↑
25.11.2024 10:53:07
Jetzt möchte ich jedoch nur auf die Datei reagieren, wenn einer der Werte (Server,WLAN,USV, oder ander) und offline in einer Zeile steht
Drucker und offline möchte ich ignorieren.
Das ist vermutlich echt eine Kunst das so zu formulieren, damit es unverständlich ist bzw. sich direkt widerspricht. Welchen der Fälle suchst du?
1) "offline" und genau einen Wert aus "Server", "WLAN", "USV", ...
2) "offline" und mindestens einen Wert aus "Server", "WLAN", "USV", ...
3) genau einen Wert aus "Server", "WLAN", "USV", ...
4) mindestens einen Wert aus "Server", "WLAN", "USV", ...

EDIT:
Am Beispiel gemutmaßt und die Verwechslung von offline einbezogen, hier 2), was auf das Beispiel bezogen 1) einschließt:

Code: Alles auswählen

grep -P '(?=.*offline)(?=.*((Server)|(WLAN)|(USV)))'

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script suche zwei Werte in einer Zeile

Beitrag von joe2017 » 25.11.2024 12:20:56

Ja wahrscheinlich war das etwas missverständlich.

Ich möchte nur reagieren wenn in der Datei das Wort "offline" vorkommt. Jedoch nicht, wenn in der selben Zeile das Wort "Drucker" vorkommt.
DIe Zeilen mit Drucker einfach komplett ignorieren. und bei allen anderen Zeilen auf offline reagieren.

Ich könnte natürlich die Datei kopieren, alle Zeilen mit Drucker löschen und anschließend wieder meine erste Suche nutzen.
Ich dachte jedoch, dass es bestimmt eine einfachere Möglichkeit gibt.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: debian bash script suche zwei Werte in einer Zeile

Beitrag von tobo » 25.11.2024 12:36:38

Die Ausschlussvariante des greps von oben, weil offensichtlich mehr als die 3 Werte (Server, WLAN, USV) zulässig sind:

Code: Alles auswählen

grep -P '^(?=.*offline)(?!.*Drucker)'

Antworten