Zählt grep unterschiedlich ?

F

flugopa

datei: test.xml
Code:
<111>1</111>
<222>2</222>
<333>3</333>
<444>4</444>

datei: xml.sh
Code:
#!/bin/sh
START_COUNTER=`cat test.xml | grep '<' | wc -l`
END_COUNTER=`cat test.xml | grep '</' | wc -l`

echo $START_COUNTER
echo $END_COUNTER

Bei mir ist der START_COUNTER mit dem END_COUNTER identisch.
Sollte nicht der START_COUNTER mehr anzeigen?

Wer hat eine Idee?
 
Mahlzeit,

das passt schon :)

Grep gibt jeweils ganze Zeilen die du dann mit wc zählst
und da du in jeder Zeile zumindest ein '>' und '</' hast ist das Ergebnis gleich.

mfg
HeadCrash
 
Du zählst einmal die *Zeilen* in denen < vorkommt und einmal die *Zeilen* in denen </ vorkommt. Vergleiche das bitte mit der Datei und du wirst so wie ich auch auf 4 kommen, oder?

EDIT: Verdammt, zu spät
 
Hallo ALL,

müßte nicht der Wert von START_COUNTER = 8 ergeben?
 
wieso? Du zählst alle Zeilen, in denen < vorkommt - das sind in der Datei 4 Stück.
 
Nein, da du die ausgegebenen Zeilen zählst.

Danke für den Hinweis.
Wie kann ich den Inhalt einer Zeile auf einzelne Zeichen prüfen?

Hintergrund: ich möchte Wissen ob eine XML dem Standart entspricht.
z.B.:
<xxx>x</xxx> = OK
<xxx>xxxx> = NOT OK
 
Jeder XML-Validierer kann das. Dafür gibt es spezielle Software. Idealerweise hast du dann auch eine sogenannte xsd, die festlegt, welche Felder in der XML-Datei existieren dürfen. Das kann der Validierer dann nämlich auch überprüfen.
 
Bei diesem xml rollen sich mir ja die Fußnägel hoch. Es darf nur ein Wurzelelement geben!

Xmlstar geht zwar, aber ein Stylesheet und xsltproc ist wohl die bessere Wahl, weil auf fast jedem System verfügbar, um zu zählen.
 
Zuletzt bearbeitet:
hallo,

also ich würde, wenn man selber parsen will, eher sowas wie Perl nehmen. Zwar gibt es auch in Perl extra Module, ich habe aber selber schon erlebt, daß man beispielsweise aus Dateien nur ganz bestimmte Informationen braucht (also den Wert eines Feldes oder die Anzahl bestimmter Felder eines Typs...) und da war das Gerödel mit den vorgefertigten XML- und SOAP-Modulen so ein Hühnerkram, daß ich mir die Datenbank-Antworten kurzerhand per HTTP/GET mit eigenem kurzen XML geholt und dann die Antwort mit Perl einfach in Arrays (dort "Listen") zerlegt habe. Mit denen und ihren Elementen kannst du anschließend machen was du willst.

Nur mal als Beispiel, daß es manchmal schon Sinn haben kann, selber aus XML was raus zu fummeln, wenn die Suchkriterien genügend einfach sind und die Struktur immer gleich. Nur ist bash dafür evtl. nicht die erste Wahl.
 
Naja, aber in einer ordentlichen Anwendung sollte die XML korrekt geparst und validiert werden. Da jedes Mal das Rad neuzuerfinden ist nicht das wahre.

Genau diese Beschreibung der Form des Inhalts per xsd und die einfache automatische Prüfung gegen Fehler in der Struktur sind die großen Vorteile. Wenn du einfach nur bestimmte Informationen übertragen willst und das alles nicht brauchst, dann würde ich auch keine XML nehmen.
 
Sollte es für diesen Zweck nicht auch eine DTD tun? Ist wohl einfacher, wenn man jetzt nicht hoch komplexe Xml-Strukturen hat, wonach es hier ja aussieht.

@saeckereier: Darf ich fragen, welches Tool du für die Schema-Validierung einsetzt und welchen Schema-Dialekt (WXS, Relax-NG oder Schematron) du nutzt und warum?

cu
 
Sorry, eine DTD ist natürlich genauso gut. Es war eben eher so gemeint, dass man im Prinzip eine Definition der Datenstruktur haben sollte. Sonst braucht man auch keine XML.. Meiner Meinung nach nehmen viele Leute heute XML sobald sie irgendwas computerlesbares brauchen obwohl es da meistens mindestes genauso praktisch wäre eine DSL (Domain-Specific-Language) für zu nehmen.

Zu deiner Frage: Im betrieblichen Umfeld zur ERP-Anbindung verwenden wir sowas. (ach ja: Tool ist der SAP-Businessconnector. Was meinst du mit Dialekten? Das sind ganz normale xsds nach W3C so wie ich das sehe..)
 
ich nehme xml inzwischen sehr gern und auch für Dinge, für die es eigentlich völlig überzogen ist - man erspart sich viel Gewürge, das man mit anderen, nicht so fest definierten Formaten hat und wenn man sich mal an die Standard-Methoden gewöhnt hat geht's auch flott.

Und für eine reine Syntax- oder Validitätsüberprüfung braucht's ja nornalerweise auch kein Scheme oder was auch immer...
 
Es gibt ja nicht nur die W3C-Schema-Sprache zur Validierung anderer Xml-Dialekte. Mit der aktuellen Recommendation des W3C kann man z.B. nicht ereignisorientiert validieren (Wenn der Wert von X so ist, muss Struktur Y so sein). Mit Schematron geht das, aber ich finde Schematron sehr unleserlich und mit Validatoren, die das können, sieht es auch dürftig aus.

@marce: Nur wenn man lediglich auf Wohlgeformtheit achtet, braucht man keine Definition. Bei Prüfung auf Validität schon.
 
ich wusste doch, daß ich da immer irgendwas durcheinanderbringe... :-) Sorry.

Ja, ich meinte wohlgeformt.
 
Wenn du einfach nur bestimmte Informationen übertragen willst und das alles nicht brauchst, dann würde ich auch keine XML nehmen.
Richtig, aber in dem Fall hat die Gegenseite das vorgeschrieben, konkret war unsere Firma in einem Partnerprogramm mit einer anderen, die Daten aus ihrer Datenbank in dem Rahmen nur (und nur!) so zur Verfügung gestellt hat. WSDL, vorformulierte XML-Abfragen und strukturierte Antworten. Da haben wir (in dem Falle ich) das für uns interessante heraus gefummelt und ab da war auf unserer Seite Schluß mit XML.

War nur ein Beispiel für ein Szenario, wo man XML *hat* ob man will oder nicht und nur Teile daraus braucht. Was soll ich da mit einem Schweizer Taschenmesser für alle XML-Eventualitäten? Die Struktur wird genau ein mal gebaut, getestet ob geht und danach läuft sie stumpf vor sich hin.

[Edit]
bei uns gibt es seit Ewigkeiten für bestimmte Textdateien, die wir fast nur tabellarisch brauchen, eine Form mit Feldern und Feldtrennern. An dem Punkt geht es also immer noch mit Text weiter, wir müssen aber danach nur noch immer Zeilen nach immer demselben Trenner splitten. Das ist teilweise umfangreich und ich fände es wahnsinnig, da überall XML zu haben, das viel zu kompliziert zu warten ist. Wir können auch ratz-fatz mal in so eine Zeile rein mit beliebigen Texteditoren, um was anzupassen. Das ist also sogar für Menschen übersichtlicher zu lesen! In sofern stimme ich komplett zu: Nicht alles, was als Text ausgetauscht werden soll, muß XML sein!
 
Zuletzt bearbeitet:
Jo, ich denke wir sind da im wesentlichen gleicher Meinung :-)
 

Ähnliche Themen

grep -p # Paragraph

Skript soll nicht doppelt laufen... kill pkill pid cron

Summe von Zahlen in einer Zeilen bilden

Bestimmte Zeilen einer Spalte addieren

Keine grafische Oberfläche (Debian Installation)

Zurück
Oben