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:
Ma mi rimane lì all'infinito.
Ho provato anche ad aprire con vim e dare:
Quest'ultimo funge però mi serve proprio che ogni fine riga ci sia il carattere ^M.
Ho provato con sed:
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:
Ma mi rimane lì all'infinito.
todos < prova > prova1
SIV ha scritto:
Ho provato anche ad aprire con vim e dare:
Quest'ultimo funge però mi serve proprio che ogni fine riga ci sia il carattere ^M.
Ho provato con sed:
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:
sia
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:

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:
oppure
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
Ora cerco di capire la prima parte del comando:
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
Ora cerco di capire la prima parte del comando:
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
Ora cerco di capire la prima parte del comando:
nelle righe che terminano con .gif ($ significa fine riga) sostituisce il fine riga con \r, in pratica lo aggiunge alla fine
Grazie corrado

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

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

devi ringraziare melmothx

Certo, ma infatti l'ho ringraziato, ho ringraziato anche te per la spiegazione!