1729 Stimmen

Wie kann ich jeden Zeilenumbruch ( \n ) mit einem Leerzeichen mit sed?

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?

106voto

ire_and_curses Punkte 65821

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.

52voto

commonpike Punkte 9386

Wer braucht sed ? Hier ist die bash Weise:

cat test.txt |  while read line; do echo -n "$line "; done

31voto

Dennis Williamson Punkte 322329

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

28voto

Dheeraj R Punkte 665
tr '\n' ' ' 

ist der Befehl.

Einfach und leicht zu bedienen.

19voto

brent saner Punkte 414

Drei Dinge.

  1. 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.

  2. 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 .

  3. 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.com

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.

Powered by:

X