sed 's/\([.!?] *\)\{0,1\}/\1\\/g' <infile | xargs printf %s\\n
Ich hatte dieses Ding w / fold
vor - was schnell war - aber ich erkannte, dass ich das gleiche w / xargs
w tun konnte , ohne Eingaben vorverarbeiten oder sed
Verzweigungsschleifen implementieren zu müssen, wenn ich nur alles, was kein terminierendes Zeichen war, einem Backslash entkam alle nachfolgenden Leerzeichen.
Die obige Anweisung entspricht also sed
entweder der Nullzeichenfolge oder einer Abschlusssequenz für jedes Zeichen (nicht in der Sequenz) , das bei der Eingabe auftritt. Auf der rechten Seite wird sed
entweder die Nullzeichenfolge oder die Abschlusssequenz durch for ersetzt \1
und 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 \n
Ewline ein, sed
die nach jeder Ersetzung beim Schreiben in stdout eingefügt wird .
Da xargs
eine mit Backslash- \n
Escape versehene Ewline vollständig entfernt wird und die Argumente, die ihr benanntes Dienstprogramm übergibt, auf nicht entkappten Leerzeichen aufgeteilt werden, printf
werden alle satzartigen Zeichenfolgen gedruckt, die xargs
Eingaben ohne nachfolgende Leerzeichen und in einer einzelnen Zeile pro Zeile einlesen. Was mehr ist - es tut es in Chargen, die sich der ARGMAX
Größe nähern - so viele wie möglich gleichzeitig. Und natürlich sed
sollte 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.