Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Text mit sed vorformatieren
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
passst
n00b
n00b


Joined: 25 Apr 2016
Posts: 3

PostPosted: Mon Apr 25, 2016 10:29 am    Post subject: Text mit sed vorformatieren Reply with quote

Hallo,

ich muss zwei unterschiedliche Versionen von einer Übersetzung vergleichen. Als Idee hatte ich die Texte nebeneinander in Tabellenkalkulation zu importieren. Der Punkt sollte als Trennzeichen fungieren. D.h. jede Zelle enthält genau einen Satz. Das klappt leider nicht, weil Tabulatoren und sonstige "unsichtbare" Sonderzeichen die Formatierung durcheinanderbringen. Ich habe dann versucht die Texte mit sed vorzuformatieren, so daß alle Zeilen der Textdateien mit einem Punkt enden.

Zeilen zusammenfügen, unsichtbare Zeichen etc geht mit sed wunderbar, aber wie füge ich zwei oder mehrere Zeilen bis zu einem bestimmten Satzzeichen, wie z.B. der Punkt zusammen?

Es soll also,
aaa
bbb.bbbb
ccc.

so aussehen:
aaabbb.
bbbccc.


Ich bin einfach nicht dahintergekommen. Geht das überhaupt mit sed? Oder hat jemand eine bessere Idee?
Back to top
View user's profile Send private message
py-ro
Veteran
Veteran


Joined: 24 Sep 2002
Posts: 1734
Location: Velbert

PostPosted: Mon Apr 25, 2016 10:56 am    Post subject: Reply with quote

Warum benutzt du nicht eines von den vorhandenen Diff Programmen?
Back to top
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3921
Location: Hamburg

PostPosted: Mon Apr 25, 2016 5:38 pm    Post subject: Reply with quote

sed heißt (s)tream-line (ed)itor - das Design ist also, zeilenweise zu agieren. Da hast Du keine Chance mit diesem Use-Case, fürchte ich.
Back to top
View user's profile Send private message
mv
Watchman
Watchman


Joined: 20 Apr 2005
Posts: 6747

PostPosted: Tue Apr 26, 2016 7:33 am    Post subject: Reply with quote

toralf wrote:
sed heißt (s)tream-line (ed)itor - das Design ist also, zeilenweise zu agieren.

Ja, aber es gibt einen Zeilenspeicher und einen Befehl, den aktuellen Zeileninhalt an den Zeilenspeicher anzuhängen. Dann kann man diesen zurückholen und mit s/../../ splitten. Ich bin aber nicht genug sed-Guru, um den entsprechenden Code ohne längere Recherche hinzuschreiben. Ich würde das Problem mit perl lösen (oder zur Not mit awk, falls es aus irgendeinem Grund auf einem System ohne Perl laufen muss)
Back to top
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2540
Location: Konradsreuth (Germany)

PostPosted: Wed Apr 27, 2016 10:18 pm    Post subject: Reply with quote

Im Zweifelsfall würde ich für sowas Perl nehmen. Perl ist immer gut für solche schmutzigen Angelegenheiten ;-)

Hier ist dein Ausgangs-String:
Code:
$ echo -e "aaa\nbbb.bbb\nccc."
aaa
bbb.bbb
ccc.

Und hiermit macht Perl das, was du willst:
Code:
$ echo -e "aaa\nbbb.bbb\nccc." | perl -ne "chomp; s/\./.\n/g; print;"
aaabbb.
bbbccc.

Natürlich auch nutzbar mittels
Code:
cat datei | perl -ne "chomp; s/\./.\n/g; print;"
Back to top
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3921
Location: Hamburg

PostPosted: Thu Apr 28, 2016 8:10 am    Post subject: Reply with quote

+1
Perl rules.
Back to top
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 3333
Location: de

PostPosted: Fri Apr 29, 2016 2:10 pm    Post subject: Re: Text mit sed vorformatieren Reply with quote

passst wrote:

Es soll also,
aaa
bbb.bbbb
ccc.

so aussehen:
aaabbb.
bbbccc.


Bitte sehr:
Code:
sed ':a;N;$!ba;s/\n//g;s/\./.\n/g' deine_datei.txt
Back to top
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2540
Location: Konradsreuth (Germany)

PostPosted: Sun May 01, 2016 10:28 am    Post subject: Reply with quote

Na toll. Auch noch zwei Zeichen kürzer als meine Perl-Lösung! Aber die Leerzeichen könnt man ja weglassen ;-)

Aber Spaß beiseite: Aus rein wissenschaftlichem Interesse wäre es super, wenn du den sed-Befehl mal auseinanderpflücken und erklären würdest, was da was macht!
Back to top
View user's profile Send private message
Markus09
Tux's lil' helper
Tux's lil' helper


Joined: 22 Mar 2013
Posts: 78

PostPosted: Sun May 01, 2016 12:16 pm    Post subject: Reply with quote

Code:
sed ':a;N;$!ba;s/\n//g;s/\./.\n/g' deine_datei.txt


Da es mich interessiert hat, habe ich das mit der Doku mal zerpflückt.
Der Befehl mach also sowas:

Teil 1: :a;N;$!ba;
Lese alle Zeilen in den "Lesepuffer"
1) Vergebe das Label "a" (:a)
2) lese und hänge die nächste Zeile dem aktuelle Lesepuffer an (N)
3) Warte auf Ende der Datei ($)
4) Falls nicht, gehe wieder zu 1), wo was label "a" definiert wurde (!ba)
--> Damit sind alle Zeilen im Lesepuffer

Teil 2: s/\n//g
Entferne alle newlines

Teil 3: s/\./.\n/g
Füge nach allen Punkten ein newline ein
Back to top
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2540
Location: Konradsreuth (Germany)

PostPosted: Sun May 01, 2016 9:38 pm    Post subject: Reply with quote

Abgefahren. Ich wusste gar nicht, dass sed sowas kann …
Back to top
View user's profile Send private message
mv
Watchman
Watchman


Joined: 20 Apr 2005
Posts: 6747

PostPosted: Mon May 02, 2016 5:15 am    Post subject: Reply with quote

l3u wrote:
Abgefahren. Ich wusste gar nicht, dass sed sowas kann …

sed ist vermutlich sogar Turing-vollständig (von der theoretischen Einschränkung der Stringlänge durch die Implementierung einmal abgesehen, natürlich). Es gibt sogar verschiedene Spiele, die in sed programmiert sind: Tetris, Türme von Hanoi, ... die einzige Einschränkung bei der Interaktivität ist natürlich, dass man nach jeder Eingabe "return" drücken muss.
Back to top
View user's profile Send private message
l3u
Advocate
Advocate


Joined: 26 Jan 2005
Posts: 2540
Location: Konradsreuth (Germany)

PostPosted: Mon May 02, 2016 11:21 am    Post subject: Reply with quote

mv wrote:
Es gibt sogar verschiedene Spiele, die in sed programmiert sind: Tetris

:-D

Das sed-Tetris erinnert mich allerdings stark an Brainfuck ;-)
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