Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Abfrage mit script

Empfohlene Antworten

Veröffentlicht

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

"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

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!!

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.

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? :-)

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

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 :-(

Hallo zusammen,

hab den Fehler/Lösung selbst gefunden.

Besten Dank für euere Hilfe

Hi,

kleiner Nachtrag: Mir hat der ABS-Guide immer prima geholfen!

ciao bloodknight

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.