Come sostituire gli spazi con newline / inserire un file di testo?


18

Ho un semplice file di testo chiamato "esempio".

Lettura con comando terminale: cat example

Produzione:

abc cdef ghi jk lmnopq rst uv wxyz

Voglio convertire (trasformare) nella seguente forma: (output atteso da cat example)

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Come posso farlo tramite la riga di comando?

(Questo è solo un file di esempio, voglio convertire la posizione della parola in colonna verticale)


Risposte:


37

Alcune scelte:

  1. Il classico usa tr:

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

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

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

    perl -pe 's/ /\n/g' example
    
  5. Usa la shell

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

Per l' sedesempio ho dovuto aggiungere a $per ottenere bash da sostituire con una nuova riga effettiva, ovvero:sed $'s/ /\\\n/g' example
acumartini,

Sopra esempio per OSX sed, per gnu-sed:sed $'s/ /\\n/g'
acumartini

16

Prova il comando seguente

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

O

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

Esempio:

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

Spiegazione:

RS (Record seperator) è una variabile awk integrata. Nel primo comando, il valore dato alla variabile del separatore Record è spazio. così awk interrompe la linea dalla stampa ogni volta che trova uno spazio.

Nel secondo comando, il valore assegnato alla variabile RS è lo spazio o un nuovo carattere di riga. Questo comando elimina la riga vuota aggiuntiva visualizzata durante l'esecuzione del primo comando.


8

Puoi usare xargs,

cat example | xargs -n 1

o meglio

xargs -n 1 < example

6
xargs -n 1 < exampleti salva 1 gattino
Rinzwind

2

Utilizzando un perloneliner:

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

Sostituirà spazi e tabulazioni con "INVIO" (aka \n)


1

Nessuno ha pubblicato Python, quindi ecco che:

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

Reindirizziamo il file di input nel pythonflusso stdin e lo leggiamo riga per riga. Ogni riga viene rimossa dalla sua nuova riga finale, divisa in parole e quindi riunita in una stringa in cui ogni parola è separata da una nuova riga. Questo viene fatto per garantire di avere una parola per riga ed evitare l'inserimento di più righe nel caso in cui ci siano più spazi accanto a l'un l'altro. Alla fine finiamo con un elenco di stringhe, che viene nuovamente unito in una stringa più grande e stampato su stream stdout. Che in seguito può essere reindirizzato a un altro file con il > out.txt reindirizzamento.


0

Simile al 'tr' sopra ma con le aggiunte:

  • Funziona anche con le schede

  • Converte più spazi o schede in 1 nuova riga

    tr -s '[:space:]' '\n' < example
    
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.