Skip to main content
Hallo,
ich habe das Mini-plasma-programm Yasp-Scripted installiert.
U.a. kann es auch die 'Core' Temperatur anzeigen.
Die entsprechende orginal Zeile im Script lautet :
sensor name="Core1Temp" type="program" cmd=%sensors | grep -A1 'Core 1' |
xargs | sed "s/.*Temp: \(+[0-9]*\).*Temp: \(+[0-9]*\)../\1 \2/"%
und mir wird auf dem Desktop angezeigt :
Core 1: +37.0°C (high = +76.0°C, crit = +100.0°C)
Kürze ich die Scriptzeile um den Ausdruck :
| xargs | sed "s/.*Temp: \(+[0-9]*\).*Temp: \(+[0-9]*\)../\1 \2/
ändert sich an der DesktopAusgabe NICHTS
Ich möchte die ganze Klammer elemenieren
(high = +76.0°C, crit = +100.0°C)
weil dieser Text die Ausgabe inhaltlos verbreitert,
hab aber keine Vorstellung, wie man DAS realisieren kann,
geschweige denn in einer Zeile.
zum besseren Verständnis
http://www.picpaste.de/yasp.png
Gruß
Joachim
--
Joachim Puttkammer
http://www.puttkammer.de
KUbuntu 9.10 - KDE 4.3
_______________________________________________
Suse mailing list
Suse@easylinux.de
http://www.easylinux.de/Kontakt/Mailinglisten/listinfo/suse
Hallo Joachim,
Am Montag, 18. Januar 2010 schrieb Joachim Puttkammer:
ausnahmsweise fullquote, und bitte, diese Mail mit einem Zeichensatz lesen, der eine
fixe Zeichenbreite hat
> Hallo,
>
> ich habe das Mini-plasma-programm Yasp-Scripted installiert.
> U.a. kann es auch die 'Core' Temperatur anzeigen.
> Die entsprechende orginal Zeile im Script lautet :
> sensor name="Core1Temp" type="program" cmd=%sensors | grep -A1 'Core 1' |
> xargs | sed "s/.*Temp: \(+[0-9]*\).*Temp: \(+[0-9]*\)../\1 \2/"%
^^^^^
Das unterstrichene entfernen, sollte helfen.
> und mir wird auf dem Desktop angezeigt :
> Core 1: +37.0°C (high = +76.0°C, crit = +100.0°C)
> Kürze ich die Scriptzeile um den Ausdruck :
kurz zu Erklärung:
> | xargs | sed "s/.*Temp: \(+[0-9]*\).*Temp: \(+[0-9]*\)../\1 \2/
^^^^^^^^
bis hier wird die Ausgabe des sensors-Befehl geliefert, die dann an das Kommando sed
übergeben wird. sed verarbeitet einen regulären Ausdruck, nämlich:
.*Temp: \(+[0-9]*\).*Temp: \(+[0-9]*\)..
das entspricht einem String, der mit irgendwas anfängt, auf das dann das
Muster "Temp: " folgt, gefolgt von einer Zahlenangabe der Form "+12...21",gefolgt
von wieder irgendwelchen beliebig vielen (auch keinen!) Zeichen, gefolgt
von "Temp: ". Dann kommt wieder eine Zahlenangabe der Form "+12...21", danach kommen
nochmal 2 beliebige Zeichen. Kurz gesagt zB folgendes: "yyyyyyyyxxxxxTemp:
+11111111111xxxaaaassssddddxxxTemp: +222222222xx", wobei da durchaus "high ="
und "crit =" in den x'en drin stehen kann.
Geht noch weiter, wir sind nooch nicht fertig :-)
\1 \2
Das was nach den "Temp: " kommt, wird in einem internen Puffer gemerkt, da sorgen die
Klammern "\(\)" dafür. Und "\1 \2" gibt den Inhalt dieser Puffer wieder aus.
Das "s" direkt nach sed ist das sogenannte "substitute command" des sed.
Der Befehl heisst also: Aus der Ausgabe, die sensors liefert, die Zeichenkette
rausfiltern, die "Core 1" enthält, und durch sed in dieser Zeichenkette die
Zeichenfolgen "Temp: " rausfiltern. Eigentlich "Temp: " ersetzen durch nichts und
die Gradangaben unverändert durch sich selbst ersetzen.
Dadurch, dass du die Zeichenfolge "\1 \2" nicht mehr ausgibst, machst du dann eine
Ersetzung durch nichts.
RegEx sind eigentlich gaaaanz einfach, wenn man sich mal fast 20 Jahre damit befasst
hat. :-)
Spass beiseite, wenn man sich mal damit befasst sind sie eigentlich wirklich simpel
und ein geniales Konzept für Suche und Ersetzen.
Mit freundlichen Grüßen
Matthias Müller
(Benutzer #439779 im Linux-Counter http://counter.li.org)
PS: Bitte senden Sie als Antwort auf meine E-Mails reine Text-Nachrichten!
Hallo Matthias
Am Montag, 18. Januar 2010 22:48:06 schrieb Matthias Müller:
> RegEx sind eigentlich gaaaanz einfach, wenn man sich mal fast 20 Jahre
> damit befasst hat. :-)
> Spass beiseite, wenn man sich mal damit befasst sind sie eigentlich
> wirklich simpel und ein geniales Konzept für Suche und Ersetzen.
20 Jahre ?
Meinst ich brauche die Sachen in der Rente noch ;-)
Solange brauche ich bis alles begriffen habe :-)
Viele Grüße
__ __ _ ___ _ ____ _____ _ _____ _ __
| \/ | ___ / |( _ ) | | __ _ _ __ |___ \|___ /_/ |___ /_/ |/ /_
| |\/| |/ _ \ | |/ _ \ _ | |/ _` | '_ \ __) | |_ (_) | |_ (_) | '_ \
| | | | (_) | | | (_) | | |_| | (_| | | | | / __/ ___) || |___) || | (_) |
|_| |_|\___/ |_|\___(_) \___/ \__,_|_| |_| |_____|____(_)_|____(_)_|\___/
____ _____ _____ ____ ___ _ ___
/ ___| ____|_ _| |___ \ / _ \/ |/ _ \
| | | _| | | __) | | | | | | | |
| |___| |___ | | / __/| |_| | | |_| |
\____|_____| |_| |_____|\___/|_|\___/
Am Montag, 18. Januar 2010 schrieb Matthias Müller:
Hallo Matthias,
> Spass beiseite, wenn man sich mal damit befasst sind sie eigentlich wirklich
> simpel
> und ein geniales Konzept für Suche und Ersetzen.
Wie gut, dass die man sed + man perl so überschaubar sind ;-)
Da streichel ich doch lieber den Kater, wenn er neben der Tastatur liegt
und er nicht den Drucker in Beschlag nimmt.
Gute Nacht
On 19.01.2010, Joachim Puttkammer wrote:
> Ich möchte die ganze Klammer elemenieren
> (high = +76.0°C, crit = +100.0°C)
htd@jael:~> echo "Core 1: +37.0°C (high = +76.0°C, crit = +100.0°C)" | perl -pe 's/\(.*\)//;'
Core 1: +37.0°C
Am Dienstag, 19. Januar 2010 schrieb Heinz Diehl:
Hallo Heinz,
> htd@jael:~> echo "Core 1: +37.0°C (high = +76.0°C, crit = +100.0°C)" |
perl -pe 's/\(.*\)//;'
> Core 1: +37.0°C
hat zu ... geführt :
pu@ku910:~$ sensors | grep 'Core 0' |perl -pe 's/\(.*\)//;'
Core 0: +39.0°C
damit bin ich sehr zufrieden :-))
merci
und jetzt müsste man nur noch den 'perl' Befehl verstehen.
Am Mittwoch, 20. Januar 2010 schrieb Joachim Puttkammer:
Nachtrag :
als Konsolenbefehl hat es wunderbar funktioniert,
aber im 'Plasma-Script' nicht,
der Desktop schmiert immer ab.
|perl -pe 's/\(.*\)//;' habe ich durch
|awk '{ print $3}'%
nach Ausprobieren, aber es ohne richtig zu verstehen, ersetzt.
Plasma-Script
sensor name="Core0Temp" type="program" cmd=%sensors | grep 'Core 0' | xargs |
awk '{ print $3}'%
On 20.01.2010, Joachim Puttkammer wrote:
> und jetzt müsste man nur noch den 'perl' Befehl verstehen.
Es ist ein sehr einfacher und kurzer Einzeiler:
der regexp sucht nach der ersten Klammer inkl. Inhalt bis zur folgenden
schliessenden Klammer und ersetzt diesen Teil mit "nichts" (loeschen).
Die Klammern sind dabei "escaped" (\), damit sie als Zeichen als solches
und nicht als Klammer von Perl interpretiert werden.
Am Mittwoch, 20. Januar 2010 schrieb Heinz Diehl:
> Es ist ein sehr einfacher und kurzer Einzeiler:
kurz stimmt , einfach nicht für mich
also folgendes habe ich gefunden
s/// substitions operator with three-part delimiters
und versuche nun deine Erläuterung
auf s/\(.*\)// zu interpretieren
> der regexp sucht nach der ersten Klammer inkl. Inhalt bis zur folgenden
> schliessenden Klammer und ersetzt diesen Teil mit "nichts" (loeschen).
kein Eintrag zwischen dem 2. und 3. '/' ist das 'Nichtersetzen' ?
> Die Klammern sind dabei "escaped" (\), damit sie als Zeichen als solches
> und nicht als Klammer von Perl interpretiert werden.
das verstehe ich und vermute der '.*' für 'inkl. Inhalt',
> also folgendes habe ich gefunden
> s/// substitions operator with three-part delimiters
> und versuche nun deine Erläuterung
> auf s/\(.*\)// zu interpretieren
Das s steht richtig erkannt fuer "ersetzen", der Aufbau ist so:
s/ / /x;
Ersetze das, was zwischen den ersten beiden Schraegstrichen steht, mit
dem, was zwischen den letzten beiden steht. Fuer x kann man dann noch
gewissen Optionen setzen, z.B. Gross- und Kleinschreibung missachten uvm.
Die Klammern selber muessen ein "\" davor haben, das sagt dem
Perl-Interpreter, dass die Klammer hier als Zeichen zu sehen ist, und
nicht als Klammer selbst.
Der Punkt "." matcht auf alles, und der Stern "*" bedeutet "von ueberhaupt
nicht vorkommend bis unendliche Anzahl des davorstehenden Zeichens (".").
Der regulaere Ausdruck macht also nix anderes, als in deinem String nach
der ersten Klammer zu suchen, von da ab alle moeglichen Zeichen mit
einzuschliessen bis zur naechsten schliessenden Klammer \(.*\) und ersetzt
das Gefundene durch nichts //.
Eine gute Uebersicht fuer Anfaenger bekommst du mittels "man perlretut".
jetzt hab ich eine Vorstellung von dem Einzeiler.
Merci
[Impressum] [Mission] Datenschutzerklärung | © 2018 COMPUTEC MEDIA GmbH