staging.inyokaproject.org

Die Anwendung der "-v" in `grep -v` reagiert unterschiedlich

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 20.04 (Focal Fossa)
Antworten |

Berlin_1946 Team-Icon

Supporter, Wikiteam

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

Hallo in die Runde,

Ich habe das gelesen grep und auch Erklärung regulärer Ausdrücke.

Was mache ich falsch?

Das funktioniert:

mate@mate-HP:~$ cat /etc/fstab | grep -v "#"
UUID=7c98e1e6-4163-40b5-b890-b20abb244f33 /               ext4    errors=remount-ro 0       1
UUID=dad2ef8b-91d7-4705-8d02-762814e2a0c0 /home           ext4    defaults        0       2
UUID=779a5b91-5f21-4e66-9a8f-5df952a18f81 none            swap    sw              0       0
mate@mate-HP:~$ 

Alle Kommentarzeilen werden ausgeblendet.

Das funktioniert nicht:

mate@mate-HP:~$ lsusb -v | grep -v Couldn\'t\ open\ device\,\ some\ information\ will\ be\ missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
...

in der langen Form:

lsusb -v | grep --invert-match --regexp=Couldn\'t\ open\ device\,\ some\ information\ will\ be\ missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
...

auch das nicht:

mate@mate-HP:~$ lsusb -v | grep --invert-match --regexp="Couldn\'t\ open\ device\,\ some\ information\ will\ be\ missing"
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
...

jedoch das im Zusammenhang mit -i sehr wohl.

mate@mate-HP:~$ lsusb -v | grep -i "Couldn"
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
...

Sind Blank, ' und Komma so richtig berücksichtigt, so wie ich RegExp auslege oder wo liegt der Hase im Pfeffer?

Bearbeitet von ChickenLipsRfun2eat:

Fehler im Titel korrigiert.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

es wäre noch gut zu wissen, auf was du genau filtern willst, also was das Ziel des Einsatzes von grep ist.

Gruß, noisefloor

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

Berlin_1946 schrieb:

[…] Das funktioniert nicht:

mate@mate-HP:~$ lsusb -v | grep -v Couldn\'t\ open\ device\,\ some\ information\ will\ be\ missing

Versuche:

lsusb -v | grep -v -e "Couldn't open device, some information will be missing" 

Berlin_1946 Team-Icon

Supporter, Wikiteam
(Themenstarter)

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

kB schrieb:

Versuche:

lsusb -v | grep -v -e "Couldn't open device, some information will be missing" 

😢 Leider auch nicht.

mate@mate-HP:~$ lsusb -v | grep -v -e "Couldn't open device, some information will be missing"
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing

noisefloor schrieb:

es wäre noch gut zu wissen, auf was du genau filtern willst, also was das Ziel des Einsatzes von grep ist.

mate@mate-HP:~$ lsusb -v|egrep "^Bus|MaxPower"
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
    MaxPower                0mA
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    MaxPower                0mA
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
    MaxPower                0mA
Couldn't open device, some information will be missing

Das will ich ohne den gelben Textteile, aus der gesamten Antwort ausschalten oder ausblenden. Ich dachte es ginge mit 2* grep. 1. grep ausblenden und 2. grep filtern.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

Du filterst auf stdout, die Meldungen sind aber stderr (Fehlerausgabe). Die kannst du bspw mit 2>> /tmp/Fehlersammlung umleiten ⇨ Shell/Umleitungen.

Berlin_1946 Team-Icon

Supporter, Wikiteam
(Themenstarter)

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

@ ChickenLipsRfun2eat,

leider noch nicht so fit mit der Shell, wie ich gerne wäre 😢

Habe mal versucht deinen Vorschlag umzusetzen. Hat etwas gedauert. Der Trick ist zu erkennen, was Fehlermeldungen sind und was nicht.

Bei grep -i kann man auch auf Fehlermeldungen triggern, aber wenn die gemischt mit egrep "^Bus|MaxPower" auf dem Schirm sind, kann man die nicht so einfach mehr trennen.

Was ich erst probieren musste, war die Fehler erst umzuleiten.

mate@mate-HP:~$ 2>> /tmp/Fehlersammlung lsusb -v|egrep "^Bus|MaxPower" 
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
    MaxPower                0mA
...

und da sind sie:

mate@mate-HP:~$ cat /tmp/Fehlersammlung
Couldn't open device, some information will be missing
...

Danke für die Hilfe.

Ich stelle auf gelöst.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Wenn Du lsusb mit sudo ausführst, gehen auch diese Fehlermeldungen weg. 😉

Berlin_1946 Team-Icon

Supporter, Wikiteam
(Themenstarter)

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

rklm schrieb:

Wenn Du lsusb mit sudo ausführst, gehen auch diese Fehlermeldungen weg. 😉

Meinst du das so?

sudo lsusb -v|egrep "^Bus|MaxPower"

mate@mate-HP:~$ sudo lsusb -v|egrep "^Bus|MaxPower"
[sudo] Passwort für mate: 
can't get debug descriptor: Resource temporarily unavailable
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
can't get device qualifier: Resource temporarily unavailable
    MaxPower                0mA
can't get debug descriptor: Resource temporarily unavailable
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hu

Bei mir leider nicht oder wie lautet der "richtige" Befehl?

Könnte es an der Option "-v" liegen, denn nur da sind mir die Fehlermeldungen aufgefallen?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Berlin_1946 schrieb:

rklm schrieb:

Wenn Du lsusb mit sudo ausführst, gehen auch diese Fehlermeldungen weg. 😉

Meinst du das so?

sudo lsusb -v|egrep "^Bus|MaxPower"

Genau.

mate@mate-HP:~$ sudo lsusb -v|egrep "^Bus|MaxPower"
[sudo] Passwort für mate: 
can't get debug descriptor: Resource temporarily unavailable
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
can't get device qualifier: Resource temporarily unavailable
    MaxPower                0mA
can't get debug descriptor: Resource temporarily unavailable
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hu

Bei mir leider nicht oder wie lautet der "richtige" Befehl?

Ich war davon ausgegangen, dass Du hauptsächlich die ursprünglich genannten Fehlermeldungen loswerden wolltest. Die bekommst Du weg, weil nun lsusb mit root-Rechten ausgeführt wird. Wenn irgendetwas nicht da ist oder z.Z. nicht zugegriffen werden kann (z.B. weil ein anderer Prozess exklusiv darauf zugreift), dann besteht das Problem natürlich auch mit root-Rechten. Vielleicht sollten wir noch einmal einen Schritt zurücktreten und Du erklärst, was Dein eigentliches Ziel ist.

Könnte es an der Option "-v" liegen, denn nur da sind mir die Fehlermeldungen aufgefallen?

Möglich, aber wenn Du die nicht verwendest, werden sich vermutlich auch die anderen Ausgaben reduzieren. Probiere es halt aus.

Berlin_1946 Team-Icon

Supporter, Wikiteam
(Themenstarter)

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

rklm schrieb:

Ich war davon ausgegangen, dass Du hauptsächlich die ursprünglich genannten Fehlermeldungen loswerden wolltest.

Das ist richtig. Es handelt sich um die Meldung: can't get debug descriptor: Resource temporarily unavailable. Was eine Fehlermeldung ist und gemischt mit der Ausgabe von sudo lsusb -v ausgegeben wird. Der folgende Befehl egrep "^Bus|MaxPower" unterdrückt diese Fehlermeldung nicht. Mit der Option -i kann aber auf die Fehlermeldung getriggert werden.

mate@mate-HP:~$ lsusb -v | grep -i "Couldn"
Couldn't open device, some information will be missing

Ich bin davon ausgegangen, das egrep "^Bus|MaxPower" nur die Zeichen Bus und MaxPower durchlässt. Also es kann mit -i getriggert werden, aber bei egrep "^Bus|MaxPower" sind die Fehlermeldungen mit enthalten. Die Annahme ist also falsch.

> Vielleicht sollten wir noch einmal einen Schritt zurücktreten und Du erklärst, was Dein eigentliches Ziel ist.

Genau das habe ich gemacht und der Tipp von ChickenLipsRfun2eat hat aus meiner Sicht das Workaround ergeben

2>> /tmp/Fehlersammlung lsusb -v|egrep "^Bus|MaxPower"

Der gelbe Befehl leitet die Fehlermeldungen in die Datei Fehlersammlung und der Rest gibt die gewünschte Ergebnisse.

Darum habe ich nach der Veröffentlichung vom 6. Juni 2021 17:19 auf gelöst gestellt.

Aber danke für deine Antwort.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Berlin_1946 schrieb:

rklm schrieb:

> Vielleicht sollten wir noch einmal einen Schritt zurücktreten und Du erklärst, was Dein eigentliches Ziel ist.

Genau das habe ich gemacht und der Tipp von ChickenLipsRfun2eat hat aus meiner Sicht das Workaround ergeben

Du hast nur beschrieben, was kleinteilig Dein Ziel ist (Zeilen unterdrücken), aber ich weiß nicht, wozu das ganze dienen soll.

2>> /tmp/Fehlersammlung lsusb -v|egrep "^Bus|MaxPower"

Der gelbe Befehl leitet die Fehlermeldungen in die Datei Fehlersammlung und der Rest gibt die gewünschte Ergebnisse.

Wenn Du mit der Datei von Fehlermeldungen nichts machst und alle loswerden willst, dann kannst Du auch nach /dev/null umleiten und bist sie los.

Berlin_1946 Team-Icon

Supporter, Wikiteam
(Themenstarter)

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

rklm schrieb:

Wenn Du mit der Datei von Fehlermeldungen nichts machst und alle loswerden willst, dann kannst Du auch nach /dev/null umleiten und bist sie los.

Ich will eine übersichtliche Ausgabe haben, die die beiden Werte Bus Nummer mit der dort aufgetretenen MaxPower anzeigt und nicht für diese Information nicht relevante Fehlermeldungen enthält. Den Trick mit /dev/null kenne ich noch nicht. 😇

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

1
sudo lsusb ... 2>/dev/null | grep ...
Antworten |