grep ist nicht mein Freund

Status
Für weitere Antworten geschlossen.

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.381
Punkte für Reaktionen
1.195
Punkte
234
Hallo Zusammen,

grep kann manchmal (aus meiner Sicht) eine ganz schöne Mimose sein. Was mache ich falsch?
Rich (BBCode):
admin@DS:~$ uname -a
Linux DS 3.10.77 #8451 SMP Wed Jan 4 00:37:28 CST 2017 x86_64 GNU/Linux synology_braswell_716+
admin@DS:~$

Möchte ich mit if das Vorhandensein von "braswell" testen, wird wieder geschimpft. Was mache ich falsch?:
Rich (BBCode):
admin@DS:~$ if [ `uname -a | grep braswell ` ] ; then echo "gefunden";fi
-sh: [: too many arguments
admin@DS:~$

Übergebe ich uname -a direkt via Pipe an grep, wird der Treffer in der Konsole schön rot angemalt:
Rich (BBCode):
admin@DS:~$ uname -a | grep braswell
Linux DS 3.10.77 #8451 SMP Wed Jan 4 00:37:28 CST 2017 x86_64 GNU/Linux synology_braswell_716+
admin@DS:~$

Oder habe ich ein anderes grundlegendes Problem?
 

ruedi61

Gesperrt
Mitglied seit
01. Apr 2016
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
mit einer einfachen [ können Variablen verglichen werden. Mit doppelter [[ können auch Muster verglichen werden.
sprich, du musst wenn du das so wie oben direkt auf der Bash ausführen willst, mit den doppelten [[ arbeiten.

Rich (BBCode):
if [[ `uname -a | grep braswell ` ]] ; then echo "gefunden";fi
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.159
Punkte
754
Alternativ die Option -c beim grep probieren, das läuft dann auch auf der sh bzw. ash. ;)
 

ruedi61

Gesperrt
Mitglied seit
01. Apr 2016
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
Oder alternativ-alternativ mit grep -Eo (aber das ist gefrickel^^) ;)

edit: äh, nur grep -o
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.165
Punkte für Reaktionen
63
Punkte
68
Da hier nur auf den Rückgabestatus des letzten Kommandos getestet werden muss und nicht auf die Variable geht es auch ganz ohne Brackets und Backticks
if uname -a | grep braswell >/dev/null ; then echo "gefunden";fi
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.159
Punkte
754
Bei dieser Zeile

Rich (BBCode):
if uname -a | grep braswell ; then echo "gefunden";fi

bekomme ich auf der ash die Ausgabe des uname Kommandos gefolgt von "gefunden" in einer neuen Zeile ...
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.165
Punkte für Reaktionen
63
Punkte
68
mit >/dev/null nicht mehr
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.159
Punkte
754
Hehehe, stimmt - sehr schön.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat