View previous topic :: View next topic |
Author |
Message |
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Thu Mar 24, 2016 10:09 am Post subject: Was zum knobeln |
|
|
Hallo zusammen,
ich hab hier was für die template matcher und regex Experten unter Euch!
Ich habe das folgende Problem:
Bisher ersetze ich in Textdateien, welche ein spezielles Format haben alle Hochkommas durch einen Zeilenumbruch (mit Wagenrücklauf) also sprich
Code: | sed "s/'/\r\n/g" $ORGFILE > $ZIELFILE |
Also die Daten kommen quasi alle "in einer Zeile", wobei dieses Format eben den Zeilenumbruch mit dem Hochkomma kennzeichnet.
Jetzt gibt dieses Format vor, dass man vor Sonderzeichen ein Fragezeichen als Fluchtzeichen setzen kann, welches dann die Bedeutung des Sonderzeichens aufhebt.
Code: | Also
' -> Zeilenumbruch
?' -> kein Zeilenumbruch sondern das Zeichen '
|
Das heißt, wenn ich den obigen Filter drüber laufen lasse, habe ich im gegebenen Fall zu viele Zeilenumbrüche.
Klar könnte ich jetzt das folgende tun:
Code: | sed "s/?'/Ä/g" $ORGFILE > $ZIELFILE2
sed "s/'/\r\n/g" $ZIELFILE2 > $ZIELFILE3
sed "s/Ä/?'/g" $ZIELFILE3 > $ZIELFILE
|
Also sprich zuerst "?'" durch ein anderes Zeichen (hier ein großes Ä) ersetzen, dann den gehabten Filter drüber laufen lassen und als drittes das andere Zeichen (großes Ä) wieder zurück in "?'" wandeln.
Das Problem ist aber, dass das nur solange gut geht, wie ich ein Zeichen finde, welches sonst keine Verwendung hat in diesem Format.
Und da wird es schwierig.
Seht ihr da eine elegantere Lösung? _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
tazinblack Veteran
Joined: 23 Jan 2005 Posts: 1146 Location: Baden / Germany
|
Posted: Thu Mar 24, 2016 10:33 am Post subject: |
|
|
... ich glaube so wäre es relativ Prozesssicher
Code: | sed "s/?'/GrIeSbReI/g" $ORGFILE | sed "s/'/\r\n/g" | sed "s/GrIeSbReI/?'/g" > $ZIELFILE |
... aber nicht sehr elegant! _________________ Gruß / Regards
tazinblack
_______________________________________________________
what's the point in being grown up if you can't be childish sometimes |
|
Back to top |
|
|
py-ro Veteran
Joined: 24 Sep 2002 Posts: 1734 Location: Velbert
|
Posted: Thu Mar 24, 2016 12:03 pm Post subject: |
|
|
Ungetestet, aber sollte
Code: | sed "s/([^?]|?)'/\1\r\n/g" $ORGFILE > $ZIELFILE |
nicht ausreichen? |
|
Back to top |
|
|
__bjoern n00b
Joined: 12 Oct 2014 Posts: 28
|
Posted: Fri Mar 25, 2016 2:42 pm Post subject: |
|
|
@py-ro Ich glaube bei deiner Lösung wird immer ein \r\n eingefügt, was bei einem ?' ja nicht passieren soll.
Hier mal meine Variante:
Code: | $ sed -e "s/\([^?]\)'/\1\r\n/g" -e "s/?'/'/g" |
Getestet mit folgenden Fällen:
Code: | $ echo "abc'def" | sed -e "s/\([^?]\)'/\1\r\n/g" -e "s/?'/'/g"
abc
def |
Code: | $ echo "abc?'def" | sed -e "s/\([^?]\)'/\1\r\n/g" -e "s/?'/'/g"
abc'def |
|
|
Back to top |
|
|
|