2012-10-25 13 views
5

Ho un file che emette linee della forma seguente:Combinare le linee da un file di testo in Unix?

$XYZ blah blah blah 
$XYZ something 
$XYZ random data 

Il prefisso "$ XYZ" è lo stesso per ogni linea, in realtà non inizia con il simbolo del dollaro, ed è altamente improbabile che si verifichi ovunque ma l'inizio di una linea.

L'unico modo per ottenere questo file è tramite la cattura dello schermo, che fa sì che le linee si avvolgano a 80 caratteri. Quindi sembra che la seguente (se si fa finta di avvolgimento è a un numero inferiore a 80):

$XYZ blah bl 
ah blah 
$XYZ somethi 
ng 
$XYZ random 
data 

vorrei ricreare le linee reali da questo. Potrei scrivere un programma per farlo, ma penso che potrebbe esserci qualche comando Unix che non mi è familiare potrebbe renderlo facile. Qualche idea?

Grazie in anticipo.

+0

perché uno screencapture? – njzk2

+0

Autorizzazioni di sicurezza pazzesche a vari livelli. Posso fare un gatto, ma non riesco a collegarlo a cp o da qualche parte da cui potrei scaricare o qualsiasi altra cosa che ho potuto pensare. – user1738853

+0

se stai facendo un 'cat' in un emulatore di terminale, non sono le interruzioni di linea che vengono inserite lato client, nel qual caso dovresti essere in grado di reindirizzare l'output localmente in qualche modo? – lynks

risposta

4

In primo luogo, unire tutte le linee in una lunga fila e quindi aggiungere un ritorno a capo, ovunque si vede la parola che dovrebbe essere l'inizio di una riga, in questo modo:

tr -d '\n' < file | sed 's/XYZ/\nXYZ/g' 
+0

stavo per rispondere esattamente con questo – lynks

+0

No, ma forse perché non sto facendo l'espressione regolare correttamente ... Avrei dovuto notare che "XYZ" in realtà inizia con un segno di dollaro. – user1738853

+0

usa '\ $' per sfuggire al dollaro, ad esempio 'sed '/ \ $ XYZ/\ n $ XYZ/g'' – dogbane

1

In perl:

perl -pe 's/\n//g;s/XYZ\s+/\n$&/g' filename.txt 
+0

Versione semplificata. –

1

Il comando paste è proprio per questo scopo:

paste -d "" - - 

Come in

echo '$XYZ blah bl 
ah blah 
$XYZ somethi 
ng 
$XYZ random 
data' | paste -d "" - - 

uscite

$XYZ blah blah blah 
$XYZ something 
$XYZ random data 
Problemi correlati