PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sed befehl - wenn laien programmieren wollen ...



standard411
20.09.14, 13:09
hallo,
ich möchchte gerne mit dem sed-befehl in textfiles ganze blöcke ändern. bzw. löschen. konkret geht es darum, die <html> sektion in einem html-file zu löschen, also <html> ... bis .... </html>.
das funktioniert aber nicht, da ich nicht weiss, wie CR-LF in der sed-anweisung eingetragen wird:

sed s/<html> .* ??? <\/html>//g

was muss statt ??? stehen?

das ganze soll als befehlszeile in ein batchfile eingetragen werden.

vielen dank im voraus
andreas

buzz768
20.09.14, 15:05
sed arbeitet zeilenweise, deshalb funktioniert "suchen und ersetzen" erst einmal nicht über mehrere Zeilen hinweg. Aber du kannst sed vor dem eigentlichen Befehl mitteilen, auf welche Zeilen er diesen anwenden soll:

[ADR1 [,ADR2] [!] CMD [ARG]

Soll heißen: In ADR1 oder von ADR1 bis ADR2 bzw. in allen anderen Zeilen (!) führe CMD aus. Du hast keine Adressen angegeben, sed soll also in jeder Zeile das Kommando s/<html> .* ??? <\/html>//g ausführen, das kann also nicht funktionieren. Also: Befehl löschen (d) anwenden von Zeile, die <html> enthält, bis Zeile, die </html> enthält:

sed '/<html>/,/<\/html>/d'

standard411
21.09.14, 19:30
Das Problem ist, dass ich im Vorhinein nicht weiss, in welchen Zeilen das CR gelöscht werden soll.

In einem anderen Posting hab ich aber ein ähnliches Prroblem gesehen, und die Lösung dazu war:

tr "\xOA" "" < infile > outfile

Das würde mir auch schon helfen nur: das funktioniert nicht. Mit x0* kann ich jedes beliebige Zeichen ändern/löschen; nur x0A nicht! x0D funktiniert auch, doch das alle ist zu wenig.

LG, Andreas

Efraim
22.09.14, 04:15
In einem anderen Posting hab ich aber ein ähnliches Prroblem gesehen, und die Lösung dazu war:

tr "\xOA" "" < infile > outfile

Das würde mir auch schon helfen nur: das funktioniert nicht.Natürlich funktioniert ein O nicht, wo eine Null hin gehört.



tr -d '\n' < infile > outfile sollte alle LFs entfernen.

Aus Erfahrung kann ich Dir aber schreiben, dass das parsen von HTML-Code mit einem einfachen Textfilter wie sed, nicht das gelbe vom Ei ist.

standard411
22.09.14, 20:06
danke,
das "xOA" ist mir nur beim posten passiert.
Warum es mit 0A nicht funktioniert hat, hab ich rausgefunden: die umbrüche waren offenbar "dos"-umbrüche, mit cat -e als ^M erkennbar. und dae schein sed zu ignorieren.

das mit dem tr -d '\n' < infile > outfile war ein guiter tip. danke.
grüße, andreas

Efraim
23.09.14, 17:22
Dos hat zwei Zeichen als Zeilenende: CR (\r) und LF (\n).

tr -d '\r' < infile > outfileentfernt die überflüssigen "Returns".