Wie werden Leerzeichen durch Zeilenumbrüche ersetzt / in eine Textdatei eingegeben?

18

Ich habe eine einfache Textdatei mit dem Namen "example".

Lesen mit Terminalbefehl: cat example

Ausgabe:

abc cdef ghi jk lmnopq rst uv wxyz

Ich möchte in folgende Form konvertieren (transformieren): (erwartete Ausgabe von cat example)

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Wie kann ich das über die Kommandozeile machen?

(Dies ist nur eine Beispieldatei, ich möchte die Position des Wortes in die vertikale Spalte konvertieren. )

Pandya
quelle
Siehe auch
Sergiy Kolodyazhnyy

Antworten:

37

Ein paar Möglichkeiten:

  1. Der Klassiker, verwenden Sie tr:

    tr ' ' '\n' < example
    
  2. Verwenden cut

    cut -d ' ' --output-delimiter=$'\n' -f 1- example
    
  3. Verwenden sed

    sed 's/ /\n/g' example
    
  4. Verwenden perl

    perl -pe 's/ /\n/g' example
    
  5. Verwenden Sie die Shell

    foo=$(cat example); echo -e ${foo// /\\n}
    
terdon
quelle
Für das sedBeispiel musste ich a hinzufügen $, um bash durch eine aktuelle Newline zu ersetzen, dh:sed $'s/ /\\\n/g' example
acumartini
sed $'s/ /\\n/g'
Obiges
16

Versuchen Sie den folgenden Befehl

awk -v RS=" " '{print}' file

ODER

awk -v RS='[\n ]' '{print}' file

Beispiel:

$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Erläuterung:

RS (Record Seperator) ist eine eingebaute awk-Variable. Im ersten Befehl wird der Wert für die Variable Datensatztrennzeichen als Leerzeichen angegeben. awk unterbricht die Zeile beim Drucken, wenn ein Leerzeichen gefunden wird.

Im zweiten Befehl wird der RS-Variable ein Leerzeichen oder ein neues Zeilenzeichen zugewiesen. Mit diesem Befehl wird die zusätzliche Leerzeile entfernt, die beim Ausführen des ersten Befehls angezeigt wurde.

Avinash Raj
quelle
8

Sie können verwenden xargs,

cat example | xargs -n 1

oder besser

xargs -n 1 < example
souravc
quelle
6
xargs -n 1 < examplerettet Sie 1 Kätzchen
Rinzwind
2

Mit einem perlOneliner:

perl -p -i -e 's/\s/\n/g' example

Leerzeichen und Tabulatoren werden durch "ENTER" (aka \n) ersetzt.

Sylvain Pineau
quelle
1

Niemand hat Python gepostet, also hier ist das:

python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt 

Wir leiten die Eingabedatei in pythonden Standard-Stream um und lesen sie Zeile für Zeile. Jede Zeile wird von ihrer abschließenden neuen Zeile befreit, in Wörter aufgeteilt und dann zu einer neuen Zeichenfolge zusammengefasst, in der jedes Wort durch eine neue Zeile getrennt wird. Auf diese Weise wird sichergestellt, dass ein Wort pro Zeile vorhanden ist und nicht mehrere neue Zeilen eingefügt werden, falls mehrere Leerzeichen daneben stehen gegenseitig. Schließlich erhalten wir eine Liste von Zeichenfolgen, die dann wieder zu einer größeren Zeichenfolge zusammengefügt und als stdout-Stream ausgedruckt werden. Das kann später mit Umleitung in eine andere Datei > out.txt umgeleitet werden.

Sergiy Kolodyazhnyy
quelle
0

Ähnlich wie 'tr' oben, aber mit den Ergänzungen:

  • Funktioniert auch für Tabs

  • Konvertiert mehrere Leerzeichen oder Tabulatoren in eine neue Zeile

    tr -s '[:space:]' '\n' < example
    
AstroTom
quelle