Wie kann ich einen Zeilenumbruch (" \n
") mit einem Leerzeichen (" ") unter Verwendung der sed
Befehl?
Ich habe es erfolglos versucht:
sed 's#\n# #g' file
sed 's#^$# #g' file
Wie kann ich es reparieren?
Wie kann ich einen Zeilenumbruch (" \n
") mit einem Leerzeichen (" ") unter Verwendung der sed
Befehl?
Ich habe es erfolglos versucht:
sed 's#\n# #g' file
sed 's#^$# #g' file
Wie kann ich es reparieren?
El Perl Version so funktioniert, wie Sie es erwartet haben.
perl -i -p -e 's/\n//' file
Wie in den Kommentaren hervorgehoben wurde, ist es erwähnenswert, dass diese Änderungen bereits vorgenommen wurden. -i.bak
Sie erhalten eine Sicherungskopie der Originaldatei vor der Ersetzung, falls Ihre regulärer Ausdruck ist nicht so schlau, wie Sie dachten.
Um mit awk alle Zeilenumbrüche durch Leerzeichen zu ersetzen, ohne die gesamte Datei in den Speicher zu lesen:
awk '{printf "%s ", $0}' inputfile
Wenn Sie einen abschließenden Zeilenumbruch wünschen:
awk '{printf "%s ", $0} END {printf "\n"}' inputfile
Sie können auch ein anderes Zeichen als ein Leerzeichen verwenden:
awk '{printf "%s|", $0} END {printf "\n"}' inputfile
Drei Dinge.
tr
(oder cat
usw.) ist absolut nicht erforderlich. (GNU) sed
und (GNU) awk
können in Kombination 99,9 % aller benötigten Textverarbeitungen durchführen.
stream != line based. ed
ist ein zeilenbasierter Editor. sed
nicht ist. Siehe Vorlesung für weitere Informationen über den Unterschied. Die meisten Menschen verwechseln sed
zeilenbasiert zu sein, weil es standardmäßig bei der Mustererkennung für EINFACHE Übereinstimmungen nicht sehr gierig ist - zum Beispiel ersetzt es bei der Mustersuche und dem Ersetzen durch ein oder zwei Zeichen standardmäßig nur die erste gefundene Übereinstimmung (es sei denn, der globale Befehl legt etwas anderes fest). Es gäbe nicht einmal einen globalen Befehl, wenn er zeilenbasiert und nicht STREAM-basiert wäre, da er nur Zeilen auf einmal auswerten würde. Versuchen Sie ed
; Sie werden den Unterschied bemerken. ed
ist ziemlich nützlich, wenn Sie bestimmte Zeilen iterieren wollen (z. B. in einer for-Schleife), aber in den meisten Fällen werden Sie nur sed
.
Dies vorausgeschickt,
sed -e '{:q;N;s/\n/ /g;t q}' file
funktioniert problemlos in GNU sed
Version 4.2.1. Mit dem obigen Befehl werden alle Zeilenumbrüche durch Leerzeichen ersetzt. Er ist hässlich und etwas umständlich einzugeben, aber er funktioniert einwandfrei. Der {}
können weggelassen werden, da sie nur aus Gründen der Vernunft enthalten sind.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.