Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Was zum knobeln
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
tazinblack
Veteran
Veteran


Joined: 23 Jan 2005
Posts: 1146
Location: Baden / Germany

PostPosted: Thu Mar 24, 2016 10:09 am    Post subject: Was zum knobeln Reply with quote

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
View user's profile Send private message
tazinblack
Veteran
Veteran


Joined: 23 Jan 2005
Posts: 1146
Location: Baden / Germany

PostPosted: Thu Mar 24, 2016 10:33 am    Post subject: Reply with quote

... 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
View user's profile Send private message
py-ro
Veteran
Veteran


Joined: 24 Sep 2002
Posts: 1734
Location: Velbert

PostPosted: Thu Mar 24, 2016 12:03 pm    Post subject: Reply with quote

Ungetestet, aber sollte

Code:
sed "s/([^?]|?)'/\1\r\n/g" $ORGFILE > $ZIELFILE


nicht ausreichen?
Back to top
View user's profile Send private message
__bjoern
n00b
n00b


Joined: 12 Oct 2014
Posts: 28

PostPosted: Fri Mar 25, 2016 2:42 pm    Post subject: Reply with quote

@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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum