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

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

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

Messaggio 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
Ultima modifica di SIV il sab 5 set 2009, 19:00, modificato 1 volta in totale.

MelmothX
Linux 0.x
Linux 0.x
Messaggi: 89
Iscritto il: sab 25 nov 2006, 20:40

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

Messaggio 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.

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

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

Messaggio 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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

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

Messaggio da Mario Vanoni »

Ambedue le varianti di MelmothX funzionano,
il tuo vim e` sballato,
nvi file mostra ^M
e pure
cat -v file

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

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

Messaggio 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

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

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

Messaggio 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.

MelmothX
Linux 0.x
Linux 0.x
Messaggi: 89
Iscritto il: sab 25 nov 2006, 20:40

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

Messaggio 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.

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

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

Messaggio 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?

MelmothX
Linux 0.x
Linux 0.x
Messaggi: 89
Iscritto il: sab 25 nov 2006, 20:40

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

Messaggio da MelmothX »

sed -e "/\.gif *$/s/$/\r/" file > file1

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

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

Messaggio 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

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

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

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

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

Messaggio 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

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

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

Messaggio 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/

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

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

Messaggio da conraid »

naturalmente intendevo questo
sed -e "/\.gif *$/s/$/\r/"
SIV ha scritto: Grazie corrado \:D/

devi ringraziare melmothx :-)

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

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

Messaggio 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!

Rispondi