ich raff sed nicht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
d4rkm3n
Beiträge: 159
Registriert: 07.05.2005 14:36:43

ich raff sed nicht

Beitrag von d4rkm3n » 18.01.2006 20:08:25

hallo,
ich habe versucht mich mit sed auseinanderzusetzen. das war aber leider erfolglos und nun möchte ich euch um rat fragen.
ich habe probiert aus einer prozesslist ( ps ax ) einen wget prozess auszulesen und ein true als ausgabewert zuliefern wenn einer laufen sollte.

Code: Alles auswählen

schalter="ps ax | grep wget | sed -n '/^grep/p'"
if [ schalter = wget ]
then
echo true
else
echo false
fi

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 18.01.2006 20:20:04

ohne sed:

Code: Alles auswählen

ps ax | grep -v grep | grep wget -q
und falls es ein ps -e auch tut kannst du dir sogar ein grep sparen:

Code: Alles auswählen

if ps -e | grep wget -q; then echo true; else echo false; fi
MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
d4rkm3n
Beiträge: 159
Registriert: 07.05.2005 14:36:43

Beitrag von d4rkm3n » 18.01.2006 20:50:38

vielen dank für deine antwort,
aber ich wäre sehr daran interessiert wie man dies mit sed lösen kann (geht das überhaupt?)

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: ich raff sed nicht

Beitrag von roli » 18.01.2006 21:01:16

Hi,

ungetestet mal ein paar anmerkunen von mir.
d4rkm3n hat geschrieben:hallo,

Code: Alles auswählen

schalter="ps ax | grep wget | sed -n '/^grep/p'"
if [ schalter = wget ]
then
echo true
else
echo false
fi
In der ersten Zeile beleg'st du die Variable schalter mit dem String "ps ax | grep wget | sed -n '/^grep/p'", das ist doch sicher nicht das was du willst. Zur Kontrolle setze ein echo $schalter ein. Was du willst ist das Ergebnis der Pipe, dazu könntest du

Code: Alles auswählen

schalter=$(ps ax | grep wget | sed -e '/^grep/p')
oder
schalter=`ps ax | grep wget | sed -e '/^grep/p'` 
verwenden (zweite Zeile = Backticks (Accentegraph))

Wenn du anstelle von "sed -n" "sed -e" verwendest, geht's. Wobei du dir im klaren sein musst, das die komplette Zeile aus dem ps Output, also incl. der URL die du mit wget gerade aufgerufen hast, in schalter landet.
Also wird das folgende Vergleichen so auch nichts geben, da in schalter wahrscheinlich wesentlich mehr steht als nur der String "wget".

Dein if-Konstrukt ist so auch Kaese, du möchtest wissen ob die Variable schalter den Wert wget enthaelt, dann:

Code: Alles auswählen

if [ "$schalter" = "wget" ]
Die Anführungszeichen um die Variablen sind nicht unbedingt noetig, ich verwende sie um damit irreführende Fehlermeldungen zu vermeiden, wenn eine Variable leer ist, dann wirft dir die Shell so was wie "nicht genung Parameter ubergeben", da ich darueber oft fast verzweifelt bin, kommen Variablen jetzt bei mir an der Stelle in Anfuehrungszeichen.

Wenn's nicht hilft, nicht genug war, ... einfach weiter fragen.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

ulf
Beiträge: 39
Registriert: 22.09.2002 13:00:52

Beitrag von ulf » 20.01.2006 12:02:16

Ein paar Anmerkungen/Ergänzungen zur (sehr guten) Erklärung von Roland:
Statt
sed -e '/^grep/p'
ist doch sicher

Code: Alles auswählen

sed -e '/grep/!p'
gemeint?
Statt
grep wget | sed -e '/^grep/p'
besser

Code: Alles auswählen

grep '[w]get'
oder

Code: Alles auswählen

sed -n '/[w]get/p'
Die if-Anweisung würde ich so schreiben:

Code: Alles auswählen

if [ -n "$schalter" ]
oder

Code: Alles auswählen

if [[ "$schalter" =~ wget ]]
(was macht man sonst mit mehreren wget-Prozessen?)

Gruß,
Ulf

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 21.01.2006 11:25:58

Hi Ulf,

vielleicht habe ich nur Knoepfe auf den Augen, dann vergiss es gleich wieder.
ulf hat geschrieben:

Code: Alles auswählen

if [[ "$schalter" =~ wget ]]
Ich habe jetzt die Manuals zu test auf der Arbeit (Solaris) und zu Hause (Linux) durchgesehen, "=~" habe ich nicht gefunden.
Das soll "ist enthalten in" pruefen, habe ich mir auch schon immer gewuenscht, aber wie gesagt, ich kann in den Manuals nix finden, welche Version benutzt du?
Auf Linux habe ich "GNU sh-utils 2.0.11" (steht ganz am Ende der Man-Page).
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

ulf
Beiträge: 39
Registriert: 22.09.2002 13:00:52

Beitrag von ulf » 22.01.2006 14:16:53

roli hat geschrieben:Hi Ulf,

vielleicht habe ich nur Knoepfe auf den Augen, dann vergiss es gleich wieder.
ulf hat geschrieben:

Code: Alles auswählen

if [[ "$schalter" =~ wget ]]
Ich habe jetzt die Manuals zu test auf der Arbeit (Solaris) und zu Hause (Linux) durchgesehen, "=~" habe ich nicht gefunden.
Das soll "ist enthalten in" pruefen, habe ich mir auch schon immer gewuenscht, aber wie gesagt, ich kann in den Manuals nix finden, welche Version benutzt du?
Auf Linux habe ich "GNU sh-utils 2.0.11" (steht ganz am Ende der Man-Page).
bash 3.0

Gruß,
Ulf

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 22.01.2006 14:43:37

OK,

mit meiner 2.05b-14 kann ich dagegen wohl nicht "anstinken"
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Antworten