CIS schrieb:
Ich bin mit dem Werkzeug SED nicht wirklich vertraut, ein kleiner Hinweis eines Profis würde mir sehr weiterhelfen

Folgendes Szenario:
In einer Textdatei sollen ab dem ersten Zeichen alle Zeichen bis einschließlich eines bestimmten Wortes entfernt werden.
Dieser SED- Befehl würde das Wort "Dokumenttitel" entfernen und das Ergebnis ausgeben
Code:
sed s/"Dokumenttitel"/""/g Textdatei
Mit dieser RegularExpression würde ich genau den Teil den Textes markieren, den ich gerne entfernen würde
Code:
.*[\n].*[\n].*[\n].*[\n].+LetzterTeil
Es gelingt aber leider mir nicht, den RegularExpressionAusdruck in dem o.g. Befehl einzusetzen..... Vielleicht kann mir hier jemand einen guten Rat geben
Das Pferd mal von hinten aufzäumen, ja warum nicht, also es ist ein Regulärer Ausdruck vorhanden, leider steht nicht dabei für welchen Tool dieser so bestimmt ist, das ist hier zumindestens bei dem
+ darin nicht ganz unbedeutend.
Code:
./txt2regex-0.8.sh --showmeta
awk + ? | ()
ed \+ \? \{\} \| \(\)
egrep + ? {} | ()
emacs + ? \| \(\)
expect + ? | ()
find + ? \| \(\)
gawk + ? {} | ()
grep \+ \? \{\} \| \(\)
javascript + ? {} | ()
lex + ? {} | ()
lisp + ? \\| \\(\\)
mawk + ? | ()
mysql + ? {} | ()
ooo + ? {} | ()
perl + ? {} | ()
php + ? {} | ()
postgres + ? {} | ()
procmail + ? | ()
python + ? {} | ()
sed \+ \? \{\} \| \(\)
tcl + ? | ()
vbscript + ? {} | ()
vi \{1\} \{01\} \{\} \(\)
vim \+ \= \{} \| \(\)
NOTE: . [] [^] and * are the same on all programs.
egal wir nehmen mal die Regex-Regeln von sed, dort ist dieses ein einfaches +
Also suchen wir uns mal einen Text der zur Regex passt, da der orginale ja scheinbar hochgeheim ist.
Auf die Regex passt genau folgendes:
4 Zeilen mit jeweils dem Zeilenendezeichen
anschließen irgendwas (Nehmen wir "Z")
danach "+"
danach "LetzerTeil"
und alles was dahinter kommt soll erhalten bleiben, (wir nehmen " Müllwagen soll stehen bleiben")
Code:
robi@ULTRA-01:~/rpmbuild/Grub> echo -e "asdf\ndfgh\nwert\nxcvb\nZ+LetzterTeil Müllwagen soll stehen bleiben"
asdf
dfgh
wert
xcvb
Z+LetzterTeil Müllwagen soll stehen bleiben
Und hier sehen wir schon ein Problem. sed arbeitet im Allgemeinen Zeilenweise, und du willst mehrere Zeilen auf einmal bearbeiten, Aber kein Problem, nur ohne dich mit sed zu beschäftigen wirst du das nicht so einfach verstehen.
entweder so hier in dem ich die 4 Zeilensprünge berücksichtige,
Code:
sed 'N;N;N;N;s/.*[\n].*[\n].*[\n].*[\n].+LetzterTeil//g'
oder so hier in dem ich wörtlich nehme
In einer Textdatei sollen ab dem ersten Zeichen alle Zeichen bis einschließlich eines bestimmten Wortes entfernt werden.
und von vornherein alles wegschneide bevor die Zeile mit dem "LetzterTeil" kommt.
Code:
sed -n '1,/LetzterTeil/s/.*LetzterTeil//gp'
das hätte aber die Nebenwirkung das hier nur diese eine Zeile ausgegeben wird, und eventuell weitere Zeilen nicht mehr.
dem könnte man dann wie folgt begegnen
Code:
sed '1,4d;s/.*LetzterTeil//g'
gibt wahrscheinlich noch ein paar Dutzend andere Möglichkeiten auch noch, müsste man aber ganz genau die Aufgabe und Bedingungen kennen.
robi