Domanda

Ho un modello come sotto

hi
hello
hallo
greetings
salutations
no more hello for you

Sto cercando di sostituire tutte le nuove righe con la scheda usando il seguente comando

sed -e "s_/\n_/\t_g"

ma non funziona.

Qualcuno potrebbe aiutarmi, per favore? Sto cercando una soluzione in sed / awk.

È stato utile?

Soluzione

non sono sicuro dell'output desiderato

# awk -vRS="\n" -vORS="\t" '1' file
hi      hello   hallo   greetings       salutations     no more hello for you 

Altri suggerimenti

Qui tr è meglio, penso:

tr "\n" "\t" < newlines 

Come suggerito da Nifle in un commento, newline ecco il nome del file che contiene il testo originale.

Poiché sed è così orientato alla linea, è più complicato da usare in un caso come questo.

sed '$!{:a;N;s/\n/\t/;ta}' file

Non è possibile sostituire le nuove righe riga per riga con sed . Devi accumulare linee e sostituire le nuove linee tra tra loro

text abc\n    <- can't replace this one

text abc\ntext def\n    <- you can replace the one after "abc" but not the one at the end

Questo script sed accumula tutte le righe ed elimina tutte le nuove righe tranne l'ultima:

sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}'

A proposito, il tuo sed script sed -e " s _ / \ n _ / \ t_g " sta cercando di dire " sostituisci tutte le barre seguite da nuove righe con barre seguite da schede " ;. I caratteri di sottolineatura assumono il ruolo di delimitatori per il comando s in modo che le barre possano essere più facilmente utilizzate come caratteri per la ricerca e la sostituzione.

paste -s

-s Concatena tutte le righe di ciascun file di input separato in                  ordine da riga di comando. Il carattere newline di ogni riga                  tranne l'ultima riga in ogni file di input viene sostituita con                  carattere di tabulazione, se non diversamente specificato dall'opzione -d.

Sei quasi arrivato con il tuo script sed, dovresti solo cambiarlo in:

sed -e "s/\n/\t/g"

Il \ è sufficiente per la fuga, non è necessario aggiungere _ E devi aggiungere / prima di g alla fine per far sapere a sed che questa è l'ultima parte dello script.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top