unixnix Geschrieben 7. Mai 2009 Teilen Geschrieben 7. Mai 2009 Hallo zusammen, ich muss vorausschicken, dass ich so gut wie überhaupt keine Ahnung von Skripten habe, vielleicht kann mir ja jemand einen guten Tipp geben, wie ich das anständig lernen könnte :-) Jetzt zu meiner Frage, kann mir jemand erklären, was diese Zeile heißt/bedeutet? "sed -n -e 's/^mailto[ <tab>][ <tab>]*\([^ <tab>]*\)[ <tab>.*$/\1/p' -e 's/...' Wie sich das zusammensetzt und was es einzeln bedeutet? Wäre echt prima, wenn mir da jemand weiterhelfen könnte Viele Grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 7. Mai 2009 Teilen Geschrieben 7. Mai 2009 "sed -n -e 's/^mailto[ <tab>][ <tab>]*\([^ <tab>]*\)[ <tab>.*$/\1/p' -e 's/...' Wie sich das zusammensetzt und was es einzeln bedeutet? Wäre echt prima, wenn mir da jemand weiterhelfen könnte sed ist der stream editor. Er nimmt einen Datenstrom und kann diesen Bearbeiten. In diesem Fall ist der Ausdruck in der Form 's/REGEX/REPLACE/p', das ist eine substitution. Es wird nach REGEX gesucht und das ganze mit \1 (ein Backref) ersetzt. Durch -n und dem p am Ende werden nur die gefundenen und ersetzten Ausdrücke als Ausgabe verwendet, alles andere wird verworfen. Das Thema RegExp ist zu Umfangreich um es hier ausführlich zu behandeln Vielleicht hilft folgendes Beispiel: # cat sample.txt Dies ist ein kleiner Beispieltext. Er hat zwei Zeilen mit Punkt am Ende. Aber er hat auch Zeilen ohne Punkt, darauf matcht der RegExp leider nicht! # cat sample.txt | sed -n -e 's/^.* \([a-zA-Z]\+\)\.$/\1/p' Beispieltext Ende Der reguläre Ausdruck ^.* \([a-zA-Z]\+\).$ passt auf Zeilen die mit irgendwas Anfangen, aber mit einem Leerzeichen, mindestens einem Buchstaben und einem Punkt enden. Alles zwischen Leerzeichen und Punkt wird referenziert (durch die runden Klammern). Dieser Zeile wird ersetzt durch die Referenz, also das letzte Wort der Zeile. Siehe man -s7 regex oder man google sich durch ^.* \([a-zA-Z]\+\).$ in Kürze: ^ steht für einen Zeilenanfang .* steht für ein beliebiges Zeichen (.) beliebig oft (*) \(...\) erzeugt eine Referenz [a-zA-Z]\+ ist die Gruppe der Buchstaben a-z und A-Z (eckige Klammer), es muss ein Element oder mehr vorhanden sein (\+) \. ist ein Punkt (da . ein beliebiges Zeichen ist) $ steht für das Zeilenende Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
unixnix Geschrieben 8. Mai 2009 Autor Teilen Geschrieben 8. Mai 2009 Hallo, danke für die erste Info. Könntet ihr mir vielleicht noch etwas weiterhelfen? Mein mailto funktioniert nicht, der liest nichts aus, oder besser besagt er findet mit meinem Befehl nichts. RCPT="`sed -n -e 's/^mailto[ ][ ]*\ ([^ ]*\)[ ].*$/\1/p' $CONFIGFILE`" Wo ist der Fehler? Hab ich eine Klammer zuviel oder zuwenig? Bitte, bitte, ich brauch dringend HILFE!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 8. Mai 2009 Teilen Geschrieben 8. Mai 2009 RCPT="`sed -n -e 's/^mailto[ ][ ]*\ ([^ ]*\)[ ].*$/\1/p' $CONFIGFILE`" Du hast die hinter Klamme escaped ("\)") die vordere jedoch nicht. sed sollte sich beschweren. sh -x testsed.sh ++ sed -n -e 's/^mailto[ ][ ]*\ ([^ ]*\)[ ].*$/\1/p' sed: -e expression #1, char 37: Unmatched ) or \) Die Frage ist auch was du eigentlich Filtern willst. Die [ ] Ausdrücke mit vielen Leerzeichen machen keinen Sinn für mich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
unixnix Geschrieben 8. Mai 2009 Autor Teilen Geschrieben 8. Mai 2009 Hallo, die [][] stehen für die Leer und Tabzeichen in der config-Datei. In der config-Datei sind die werte durch Leerzeichen oder Tab getrennt. Ich hab in der config-Datei ein mailto definiert, an das eine Mail geschickt werden soll. Blöde Frage, welche hintere Klammer meinst du? Ich weiß jetzt ehrlich gesagt nicht, wo ich was ändern soll? :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 8. Mai 2009 Teilen Geschrieben 8. Mai 2009 In s/^mailto[ ][ ]*\ ([^ ]*\)[ ].*$/\1/p ^ ^^ Die Klammer ( steht allein, die Klammer \) ist korrekt escaped. Tabs werden übrigens als \t geschrieben. Wenn du in der config also sowas hast wie mailto (spaces, tabs) user@example.com (spaces,tabs) Dann ist der korrekte Ausdruck für sed s/^mailto[ \t]*\([^ \t]*\)[ \t]*$/\1/p Im Detail: ^ - Zeilenanfang mailto - mailto [ \t]* - ein oder mehr Zeichen aus der Gruppe Leerzeichen und Tabs \( - Backreferenz start [^ \t]* - ein oder mehr Zeichen die nicht aus der Gruppe Leerzeichen und Tabs sind \) - Backreferenz ende [ \t]* - ein oder mehr Zeichen aus der Gruppe Leerzeichen und Tabs $ - Zeilenende Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
unixnix Geschrieben 8. Mai 2009 Autor Teilen Geschrieben 8. Mai 2009 Super, es funktioniert :-) Darf ich dich noch was fragen? Ich hab jetzt erst das erstemal mit Scriptschreiben zutun und wirklich viel Ahnung hab ich bis jetzt noch nicht. Wie lernt man das am Besten? Hättest du da einen Tipp? Meine zweites Anliegen wäre, eine weitere Abfrage. get_df_info() { df -lk | sed -n -e 's/[ ][ ]*/ /g' -e 1p -e '/^\/dev\//p' | cut -d ' ' -f1,5,6 | tr -d '%'| while read p1 p2 p3; do echo df:"$p1 $p2 $p3"; MAX=$DEFAULTCAP for j in $CONF; do PARTITION=`echo $j | cut -d ' ' -f1` if [ "$p3" = "$PARTITION" ]; then MAX=`echo $j | cut -d ' ' -f2` fi done if [ $p2 -gt $MAX ]; then echo Device: $p1 Capacity: $p2 Mountpoint: $p3 fi done } Jetzt soll in die for-Schleife soetwas wie das rein OIFS=$IFS; IFS="|"; set $LINE; IFS=$OIFS; Wo bring ich das unter und wie ruf ich dann die einzelnen Variablen auf? Für euch hört sich das vielleicht leicht an, aber für mich ist das für den Einstieg schon nicht gerade leicht :-( Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
unixnix Geschrieben 8. Mai 2009 Autor Teilen Geschrieben 8. Mai 2009 Hallo zusammen, hab den Fehler/Lösung selbst gefunden. Besten Dank für euere Hilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bloodknight Geschrieben 11. Mai 2009 Teilen Geschrieben 11. Mai 2009 Hi, kleiner Nachtrag: Mir hat der ABS-Guide immer prima geholfen! ciao bloodknight Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.