sed 's/\([.!?] *\)\{0,1\}/\1\\/g' <infile | xargs printf %s\\n
Ich hatte dieses Ding w / foldvor - was schnell war - aber ich erkannte, dass ich das gleiche w / xargsw tun konnte , ohne Eingaben vorverarbeiten oder sedVerzweigungsschleifen implementieren zu müssen, wenn ich nur alles, was kein terminierendes Zeichen war, einem Backslash entkam alle nachfolgenden Leerzeichen.
Die obige Anweisung entspricht also sedentweder der Nullzeichenfolge oder einer Abschlusssequenz für jedes Zeichen (nicht in der Sequenz) , das bei der Eingabe auftritt. Auf der rechten Seite wird sedentweder die Nullzeichenfolge oder die Abschlusssequenz durch for ersetzt \1und anschließend ein Backslash eingefügt. Das Ergebnis ist, dass jedes Zeichen außer einem, .!?wenn mindestens ein Leerzeichen folgt, einen \Backslash-Escape-Effekt erhält . Dies schließt die \nEwline ein, seddie nach jeder Ersetzung beim Schreiben in stdout eingefügt wird .
Da xargseine mit Backslash- \nEscape versehene Ewline vollständig entfernt wird und die Argumente, die ihr benanntes Dienstprogramm übergibt, auf nicht entkappten Leerzeichen aufgeteilt werden, printfwerden alle satzartigen Zeichenfolgen gedruckt, die xargsEingaben ohne nachfolgende Leerzeichen und in einer einzelnen Zeile pro Zeile einlesen. Was mehr ist - es tut es in Chargen, die sich der ARGMAXGröße nähern - so viele wie möglich gleichzeitig. Und natürlich sedsollte es auch seine Arbeit ziemlich schnell erledigen - es muss nur eine globale Substitution pro Eingabezeile durchgeführt werden.
Die Ergebnisse sehen folgendermaßen aus:
Einige Lorem Ipsum von www.lipsum.com :
sed 's/\([.!?] *\)\{0,1\}/\1\\/g' <<LIPSUM | xargs printf %s\\n
Section 1.10.32 of "de Finibus Bonorum et Mal
orum", written by Cicero in 45 BC
"Sed ut perspiciatis unde omnis iste natus er
ror sit voluptatem accusantium doloremque lau
dantium, totam rem aperiam, eaque ipsa quae a
b illo inventore veritatis et quasi architect
o beatae vitae dicta sunt explicabo.
Nemo enim ipsam voluptatem quia voluptas sit
aspernatur aut odit aut fugit, sed quia conse
quuntur magni dolores eos qui ratione volupta
tem sequi nesciunt.
Neque porro quisquam est, qui dolorem ipsum q
uia dolor sit amet, consectetur, adipisci vel
it, sed quia non numquam eius modi tempora in
cidunt ut labore et dolore magnam aliquam qua
erat voluptatem.
Ut enim ad minima veniam, quis ...
...
reiciendis voluptatibus maiores alias consequ
atur aut perferendis doloribus asperiores rep
ellat." 1914 translation by H.
LIPSUM
... was druckt ...
Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC
"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.
Ut enim ad minima veniam, quis ...
...
reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat." 1914 translation by H.