it-swarm.com.de

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

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 konvertieren (transformieren) in folgende Form: (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 mwandeln Wortposition in vertikaler Spalte)

14
Pandya

Ein paar Möglichkeiten:

  1. Der Klassiker, benutze tr:

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

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

    sed 's/ /\n/g' example
    
  4. Benutze Perl

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

    foo=$(cat example); echo -e ${foo// /\\n}
    
31
terdon

Versuchen Sie den folgenden Befehl

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

OR

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

Beispiel:

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

Erklärung:

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.

16
Avinash Raj

Sie können xargs verwenden,

cat example | xargs -n 1

oder besser

xargs -n 1 < example
8
souravc

Verwenden eines Perl Oneliner:

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

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

2
Sylvain Pineau

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 den Standard-Stream von python 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 > out.txt in eine andere Datei umgeleitet werden.

1

Ä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
    
0
AstroTom