Pagina 1 di 2

[Risolto] - Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 17:20
da SIV
Ragazzi ho un problemino.

Devo fare in modo che un file creato con vim o kwrite o qualsiasi altro editor unix debba avere ad ogni fine riga "^M", ovvero il carattere di a capo utilizzato su windows.

Per prima cosa ho utilizzato il comando todos:

Codice: Seleziona tutto

todos prova prova1
Ma mi rimane lì all'infinito.

Ho provato anche ad aprire con vim e dare:

Codice: Seleziona tutto

:set ff=dos
Quest'ultimo funge però mi serve proprio che ogni fine riga ci sia il carattere ^M.

Ho provato con sed:

Codice: Seleziona tutto

sed -e 's/$/^M/g' file > file1
Ma nulla, se apro il file con vim, ad ogni fine riga non c'è ^M.

N.B.
Il carattere ^M, non lo digito direttamente, bensì lo faccio con ctrl+v ctrl+m, se lo do con "shift+ì" vim me aggiunge ma come testo non come carattere non stampabile.


L'unica soluzione che ho trovato per ora, è aprire il file di configurazione con vim e manualmente ad ogni fine riga aggiungere ^M a mano, ma volevo qualcosa di più automatizzato perchè il file non poi così corto.


P.S.
Quando apro il file di configurazione con vim ecco come dovrebbe apparire:
prova prova^M

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 17:36
da MelmothX
SIV ha scritto:Ragazzi ho un problemino.

Devo fare in modo che un file creato con vim o kwrite o qualsiasi altro editor unix debba avere ad ogni fine riga "^M", ovvero il carattere di a capo utilizzato su windows.

Per prima cosa ho utilizzato il comando todos:

Codice: Seleziona tutto

todos prova prova1
Ma mi rimane lì all'infinito.
todos < prova > prova1
SIV ha scritto: Ho provato anche ad aprire con vim e dare:

Codice: Seleziona tutto

:set ff=dos
Quest'ultimo funge però mi serve proprio che ogni fine riga ci sia il carattere ^M.

Ho provato con sed:

Codice: Seleziona tutto

sed -e 's/$/^M/g' file > file1
sed -e 's/$/\r/' file > file1
SIV ha scritto:
Ma nulla, se apro il file con vim, ad ogni fine riga non c'è ^M.
dovresti vedere la scritta DOS sulla barra di stato, non i \r a fine riga.

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 17:55
da SIV
Ok, grazie della correzione al comando todos.

Allora, se uso sia:

Codice: Seleziona tutto

todos <prova> prova1
sia

Codice: Seleziona tutto

sed -e 's/$/\r/' prova > prova1
e poi apro il file prova1 con vim, me lo riconosce come [Dos] e non mi mostra ^M in blu a fine riga.

È proprio questo il punto, se non ci sono questi caratteri ^M a fine riga, il file di configurazione non è valido.


Ecco come deve essere necessariamente il file per andare bene:
Immagine

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 18:06
da Mario Vanoni
Ambedue le varianti di MelmothX funzionano,
il tuo vim e` sballato,
nvi file mostra ^M
e pure
cat -v file

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 18:11
da conraid
SIV, è tutto ok
gli editor "intelligenti" riconoscono la codifica e ti mostrano un "a capo" in ogni caso, sia che il file sia in notazione unix sia in notazione dos
lo stesso file che vim non ti mostra con ^M prova ad aprilo con mcedit per esempio
Quando vedi ^M significa che l'editor non sa trattare i fine riga stile dos

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 18:28
da SIV
Ragazzi, allora il file di configurazione di cui parlo è quello delle emoticons di emesene.

Questo è il file:

Codice: Seleziona tutto

mah                                                                                                           
/home/muller/.config/emesene1.0/zevues_hotmail_it/custom_emoticons/mah.21ae769afa80bafb72fe2341d8f0e250f7b58c4a.gif                                                                                                         
sisi                                                                                                          
/home/muller/.config/emesene1.0/zevues_hotmail_it/custom_emoticons/sisi.4d6cae0ee1a787f7d0ca768737a05ddd8acc49b6.gif
Se do:

Codice: Seleziona tutto

sed -e 's/$/\r/' prova > map
oppure

Codice: Seleziona tutto

todos <prova> map
il file non è buono per emesene, infatti non visualizza le emoticons.


P.S.
Questo file map, è generato automaticamente da emesene, e se lo apro con vim appaiono i ^M, se poi lo apro con kwrite lo modifco (o anche non lo modifico) e lo salvo, poi lo riapro con vim i ^M non appaiono più ed infatti il file non è più utilizzabile per emesene.
Per farlo rifunzionare devo riaprilo con vim e manualmente inserire i ^M

Se invece lo apro ed ad ogni fine riga aggiungo ^M, il file è "buono" ed emesene visualizza le emoticons.

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 18:41
da MelmothX
probabilmente il formato è un po', diciamo, "particolare". Probabilmente i \r non sono in ogni riga. Magari fai un hexdump del file e vedi com'è realmente.

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 18:52
da SIV
MelmothX ha scritto:probabilmente il formato è un po', diciamo, "particolare". Probabilmente i \r non sono in ogni riga. Magari fai un hexdump del file e vedi com'è realmente.
Probabilmente ecco la soluzione. Con quale comando posso mettere i \r una riga sì ed una no? O meglio, ad ogni riga che finisce per .gif?

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 18:54
da MelmothX
sed -e "/\.gif *$/s/$/\r/" file > file1

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 18:58
da conraid
non conosco molto python, ma guardando i sorgenti il programma legge e scrive "\r\n" come è giusto che sia
Però c'è qualche errore, perché

Codice: Seleziona tutto

$ file map
map: ASCII text, with CRLF, LF line terminators
$ file tt.dos
tt.dos: ASCII text, with CRLF line terminators
update
avete risolto vedo

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 18:58
da SIV
Il comando funziona, e ho risolto! Grazie mille :thumbright: :thumbright:

Ora cerco di capire la prima parte del comando:

Codice: Seleziona tutto

/\.gif *$/s

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 19:03
da conraid
SIV ha scritto:Il comando funziona, e ho risolto! Grazie mille :thumbright: :thumbright:

Ora cerco di capire la prima parte del comando:

Codice: Seleziona tutto

/\.gif *$/s
nelle righe che terminano con .gif ($ significa fine riga) sostituisce il fine riga con \r, in pratica lo aggiunge alla fine

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 19:06
da SIV
conraid ha scritto:
SIV ha scritto:Il comando funziona, e ho risolto! Grazie mille :thumbright: :thumbright:

Ora cerco di capire la prima parte del comando:

Codice: Seleziona tutto

/\.gif *$/s
nelle righe che terminano con .gif ($ significa fine riga) sostituisce il fine riga con \r, in pratica lo aggiunge alla fine
Grazie corrado \:D/

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 19:12
da conraid
naturalmente intendevo questo
sed -e "/\.gif *$/s/$/\r/"
SIV ha scritto: Grazie corrado \:D/

devi ringraziare melmothx :-)

Re: Sostituzione "sed" o "vim" di ^M

Inviato: sab 5 set 2009, 20:20
da SIV
conraid ha scritto:naturalmente intendevo questo
sed -e "/\.gif *$/s/$/\r/"
SIV ha scritto: Grazie corrado \:D/

devi ringraziare melmothx :-)
Certo, ma infatti l'ho ringraziato, ho ringraziato anche te per la spiegazione!