Frage zur Shellscripting

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
BlackSimorgh

Frage zur Shellscripting

Beitrag von BlackSimorgh » 20.09.2011 15:33:06

hallo Leute,
ich weiß zwar nicht ob ich hier richtig bin aber ich möchte einen Shellscript zum darstellen von ras feeds schreiben. und habe diesen script bei googel gefunden und ihn an meine "Bedürfnisse" angepasst.

hier ist das original:

Code: Alles auswählen

#!/bin/sh

URL="http://ca.rss.news.yahoo.com/rss/topstories"

if [ $# -eq 1 ] ; then
  headarg=$(( $1 * 2 ))
else
  headarg="-8"
fi

curl --silent "$URL" | grep -E '(title>|description>)' | \
  sed -n '4,$p' | \
  sed -e 's/<title>//' -e 's/<\/title>//' -e 's/<description>/   /' \
      -e 's/<\/description>//' | \
  sed -e 's/<!\[CDATA\[//g' |            
  sed -e 's/\]\]>//g' |         
  sed -e 's/<[^>]*>//g' |      
  head $headarg | sed G | fmt
und hier ist das von mir veränderte Variante:

Code: Alles auswählen

#!/bin/sh

URL="http://www.zitate-online.de/zitatdestages.xml"

curl --silent "$URL" | grep -E '(<description>)' | \
  sed -n '2,$p' |
  sed -e 's/<description>//' -e 's/<\/description>//' |
  sed -e 's/  //g' |
  fmt
so, mein Problem dabei ist, dass er nicht alles anzeigt. kann mir einer sagen was ich falsch gemacht habe bzw. mir einen anderen Weg vorschlagen?
danke im voraus

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Frage zur Shellscripting

Beitrag von syssi » 21.09.2011 17:23:23

Der Uebeltaeter ist "grep -E '(<description>)' ". Die Beschreibung ist nicht immer einzeilig. Grep gibt jedoch nur die eine Zeile zurueck, in welche das Tag zu finden ist. Der Rest ist schon an dieser Stelle verschollen.

Auch keine zufriedenstellende Loesung aber trotzdem schoen:

Code: Alles auswählen

curl --silent "$URL" | awk -F'[<|>]' '/description/{print $3}' 

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 21.09.2011 20:47:34

Ich würde dafür kein Shellskript benutzen, sondern XSLT.

Speichere folgendes als stylesheet.xsl:

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet exclude-result-prefixes="rdf rss l dc admin content xsl"
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rss="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:l="http://purl.org/rss/1.0/modules/link/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <xsl:output method="text"/>

  <xsl:template match="/rdf:RDF">
    <xsl:apply-templates select="rss:item" />
  </xsl:template>

  <xsl:template match="rss:item">
    <xsl:value-of select="normalize-space(rss:description)"/>
    <xsl:text>

</xsl:text>
  </xsl:template>

</xsl:stylesheet>
Und dann

Code: Alles auswählen

xsltproc stylesheet.xsl zitatdestages.xml
Bzw. für dein Skript:

Code: Alles auswählen

#!/bin/sh

URL="http://www.zitate-online.de/zitatdestages.xml"

curl -q --silent "$URL" | xsltproc stylesheet.xsl -
Ich habe hier im curl Aufruf noch -q eingefügt, da sonst die curlrc des Users gelesen wird und dann damit evtl ein anderes Verhalten eintritt.
MfG GoKi
:wq

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 21.09.2011 21:46:46

ich danke euch für eure schnelle Antwort.
ich sage euch jetzt mal wofür ich das überhaupt brauche.
und zwar bin ich ein Mac User und benutze GeekTool und wollt mit dem Shellscript das Zitat auf dem Schreibtisch einblenden lassen.

so und mit dem xsl Datei kenn ich mich nicht so gut aus. nach dem ich die "stylesheet.xsl" Datei abgespeichert habe, mach ich was?
muss ich noch das hier

Code: Alles auswählen

#!/bin/sh

URL="http://www.zitate-online.de/zitatdestages.xml"

curl -q --silent "$URL" | xsltproc stylesheet.xsl -
als shell script speichern oder wie funktioniert das?


UPDATE:
ok ich habe es gechaft, dass es angezeigt wird.
ich habe einfach im schellscript den Pfad des "stylesheet.xsl" davor eingefügt.

jetzt muss ich das so hinbekommen, dass er mir nur das Heutige Zitat Anzeigt.
weil jetzt zeigt er mir alle 30 Einträge an. was muss ich denn ändern damit das funktioniert?

danke im voraus

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 21.09.2011 22:06:09

Du brauchst einen XSLT-Prozessor. Ich habe in meinem Beispiel xsltproc verwendet. Es gibt aber verschiedene. Wenn Du dann das Skript ausführst, werden die Zitate aus der xml Datei ausgegeben. Wahrscheinlich sollte man in dem Skript dann auch gleich den absoluten Pfad zum Stylesheet angeben.
Das wolltest Du doch so?

Von Mac und dem von dir erwähnten Programm habe ich wiederum keine Ahnung.

Edit:
Wenn Du nur das erste Zitat willst, ist die einfachste Methode in der pipe im Skript noch ein

Code: Alles auswählen

|head -n1
anzuhängen. Alternativ kann man auch das Stylesheet anpassen. Hab's mal auf nopaste gestellt. NoPaste-Eintrag35920
MfG GoKi
:wq

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 21.09.2011 22:45:40

cool danke das mit dem

Code: Alles auswählen

|head -n1
hat funktioniert.
jetzt will ich gerne wissen, ob es möglich ist das Wort im Klammern auf die nächste Zeile zu befördern?
also egal wie lang die Zeilen sind, sollen die Klammern auf die nächste Zeile Stehen.

danke im voraus.

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 22.09.2011 01:44:11

Wenn sonst keine "(" drin vorkommen wieder direkt per Stylesheet: NoPaste-Eintrag35921
head in der Pipe sollte dann umgestellt werden, so dass die ersten beiden Zeilen ausgegeben werden.

Alternativ kann man natürlich auch wieder in der Pipe rumfummeln, z.B. per sed:

Code: Alles auswählen

| sed 's/([^(]*)/\n&/'
So, die nächste Anpassung kriegst selbst hin :-)
MfG GoKi
:wq

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 22.09.2011 02:38:24

also das mit dem code für den script hat nicht richtig funktioniert, dann habe ich die zwei Stylesheets mit einander kombiniert und es hat funktioniert.
nur dass jetzt die Klammern weg sind. kann man die denn irgendwie drin lassen?

aber danke erstmal für deine Hilfe.
es hat mir sehr geholfen. nach dem ich das ganze Internet nach eine Lösung durchsucht hatte, hatte ich die Hoffnung fast aufgegeben.

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 22.09.2011 12:15:22

Das Stylesheet entfernt den in Klammern enthaltenen Text aus dem Zitat und nutzt ein weiteres Feld, um die Ausgabe in der zweiten Zeile zu erzeugen. Füge einfach in den <xsl:text> Tags für die zweite Ausgabe (creator), wieder die Klammern (oder sonstige Zeichen) hinzu.
MfG GoKi
:wq

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 22.09.2011 13:06:01

hey sorry wenn, ich wider nerve aber es will nicht funktionieren.
bin ich zu doof? ich habe das so gemacht. ist das falsch?

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet exclude-result-prefixes="rdf rss l dc admin content xsl"
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rss="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:l="http://purl.org/rss/1.0/modules/link/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <xsl:output method="text"/>

  <xsl:template match="/rdf:RDF">
    <xsl:apply-templates select="rss:item[1]" />
  </xsl:template>

  <xsl:template match="rss:item">
    <xsl:value-of select="normalize-space(substring-before(rss:description, '('))"/>
    <xsl:text>
</xsl:text>
    <xsl:value-of select="dc:creator"/>
    <xsl:text>
    (creator)
</xsl:text>
  </xsl:template>

</xsl:stylesheet>

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 22.09.2011 13:44:34

Okay, ich drücke mich wohl etwas missverständlich aus. Du willst doch nur "(" und ")" zusätzlich ausgeben. Also müssen auch nur diese Zeichen angegeben werden.
Der relevante Teil könnte also so aussehen:

Code: Alles auswählen

  <xsl:template match="rss:item">
    <xsl:value-of select="normalize-space(substring-before(rss:description, '('))"/>
    <xsl:text>
(</xsl:text>
    <xsl:value-of select="dc:creator"/>
    <xsl:text>)
</xsl:text>
  </xsl:template>
MfG GoKi
:wq

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 22.09.2011 14:15:57

ach so geht das.
ich bin von html und php ausgegangen. weil man da nichts vor den spitzen klammern setzen darf, hab ich gedacht hier wäre das auch so.
cool danke jetzt sieht das so aus wie ich das haben wollte.

danke nochmal :THX: :mrgreen:

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 22.09.2011 15:09:36

hey,
noch eine Frage:
ich habe raus bekommen, dass man mit dem Befehl

Code: Alles auswählen

line-height="12pt"
die Zeilenabstände regeln kann. Aber egal wo ich das einsetze passiert nix.
das ist doch der richtige Befehl oder?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Frage zur Shellscripting

Beitrag von Cae » 23.09.2011 00:13:30

BlackSimorgh hat geschrieben:hey,
noch eine Frage:
ich habe raus bekommen, dass man mit dem Befehl

Code: Alles auswählen

line-height="12pt"
die Zeilenabstände regeln kann. Aber egal wo ich das einsetze passiert nix.
das ist doch der richtige Befehl oder?
http://de.selfhtml.org/css/eigenschafte ... ine_height

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 23.09.2011 00:24:36

die Seite ist aber nur für HTML bzw. PHP.
ich möchte aber wissen wie ich die Zeilenabstände in xsl Dateien regulieren kann.

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 23.09.2011 00:49:15

Die Ausgabe bisher war reiner Text. Da gibt es keinen variablen Zeilenabstand oder sowas. :?

Vielleicht solltest Du deine Frage noch einmal konkret formulieren. Evtl ist es sinnvoll dafür einen neuen Thread zu erstellen, wenn es um eigentlich was anderes geht, z.B. die Anzeige in dem OSX Programm (wobei das debianforum für OSX vielleicht nicht die am besten geeignete Plattform ist).
MfG GoKi
:wq

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Frage zur Shellscripting

Beitrag von Cae » 23.09.2011 00:50:18

BlackSimorgh hat geschrieben:die Seite ist aber nur für HTML bzw. PHP.
ich möchte aber wissen wie ich die Zeilenabstände in xsl Dateien regulieren kann.
Das war nicht klar geworden.

Zwanzig Sekunden Suchmaschinenbenutzung: http://www.w3.org/TR/xsl/#line-height.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 23.09.2011 01:03:53

GoKi hat geschrieben:Die Ausgabe bisher war reiner Text. Da gibt es keinen variablen Zeilenabstand oder sowas. :?

Vielleicht solltest Du deine Frage noch einmal konkret formulieren. Evtl ist es sinnvoll dafür einen neuen Thread zu erstellen, wenn es um eigentlich was anderes geht, z.B. die Anzeige in dem OSX Programm (wobei das debianforum für OSX vielleicht nicht die am besten geeignete Plattform ist).
ich hatte eigentlich in einen anderen Forum betreffend dem Programm, nach eine Lösung gefragt, und nach dem ich keine Antwort bekommen habe, habe ich mich selbst auf der suche nach eine Lösung gemacht.
und dann habe ich festgestellt, dass Shell script oft mit Linux in Verbindung steht und hab mir einfach mal gedacht poste ich mal in so ein Forum, vielleicht bekomme ich dann eine Lösung geboten. und ich danke dir auch für diese Lösung. vielleicht war das mit dem Zeilenabstand doch etwas zu viel gewollt.

naja dann lasse ich es dabei beruhen und melde mich vielleicht wegen andere Lösungen nochmal. :mrgreen:

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 23.09.2011 02:15:40

Das ist ja schon okay. Nur war der Sprung zur Formatierung doch irgendwie recht weit. Will das Programm HTML, usw...

Google sollte dir aber recht gute Ergebnisse liefern, wenn man z.B. nach "xsl generate html" suchst. Daraus sollte sich dann recht schnell was brauchbares produzieren lassen.
MfG GoKi
:wq

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 28.09.2011 20:27:29

hey,
ich habe grade festgestellt, dass ich noch ein Problem habe.
und zwar sind manchmal die Texte Länger als mein Bildschirm und weil der Text nicht automatisch in die Nächste Zeile rutscht wollte ich fragen ob du eine Idee hast.

danke im voraus

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 01.10.2011 01:58:54

Du kannst z.B. fold auf der Shell nutzen, um den Text nach einer bestimmten Anzahl von Zeichen umzubrechen.
MfG GoKi
:wq

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 01.10.2011 15:32:11

Kannst du mir dafür vielleicht ein Beispiel geben?
Weil ich nicht weiß wie man das verwendet.
Danke im voraus

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 04.10.2011 18:03:31

ok, nach einigen versuchen und rumprobieren habe ich es geschafft.
danke nochmal

BlackSimorgh

Re: Frage zur Shellscripting

Beitrag von BlackSimorgh » 27.01.2012 00:44:09

hey, ich habe glaube ich eine Schwachstelle in den Codes gefunden. oder anders gesagt, es ist mir aufgefallen, nachdem nichts ausser die Klammern gezeigt wurde.
ich glaube es wird nix mehr angezeigt, weil das Zitat keinen Verfasser hat bzw. der Verfasser ist die Seite selber. Außerdem hat es bis vor einigen Stunden wunderbar funktioniert.

kann man das irgendwie lösen?

danke im voraus

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zur Shellscripting

Beitrag von GoKi » 27.01.2012 10:42:16

BlackSimorgh hat geschrieben:kann man das irgendwie lösen?
Ja kann man. z.B. NoPaste-Eintrag36203
Oder einen Tag warten, bis wieder ein Verfasser angegeben ist :-)
MfG GoKi
:wq

Antworten