Newsgroup: it.comp.os.unix
Titolo: comando grep per carattere ^M

Salve a tutti
Cortesemente volevo sapere come fare per usare il comando grep per trovare
il carattere ^m
(controll m) all interno di un file o trovare piu file all-interno di una
dir che contengano questo carattere.Oppure posso usare un altro comando ma
come?
Grazie
MURDOCK
--------------------------------
Inviato via 
http://usenet.libero.it

 
Putroppo temo che non ci sia possibilità diversa dal cancellare a mano 
i ^M. Ho fatto un po' di prove e i comandi come grep e cat non rilevano
la presenza dei ^M anche se vi, ad esempio, se ne accorge. Se devi
cancel-
lare velocemente i ^ M da una serie di files ascii, puoi provare a fare
un ftp unix -> windows dei suddetti files in modalita' binario e poi
ritra-
sferirli in modalità ascii windows -> unix.
Ciao,
Alessandro
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

[CUT]
Hai provato con :
grep -l  ^M *
in carattere ^M lo crei con la sequenza  ctrl+v+m.
Dovrebbe elencarti tutti i file che contengono il carattere carriage
returns.

 
Il problema principale e' inserire ^M come parametro al comando grep,
in quanto lo shell interviene e impedisce il buon funzionamento.
Crea un file che contenga solo un ^M e poi lo dai in pasto al grep
come pattern di ricerca.
echo CTRL-V CTRL-M > /tmp/pattern
grep -f /tmp/pattern <list-of-files>
per eliminare i ^M dai files poi hai vari metodi:
Comandi tr e sed, che creano nuovi files eliminando il carattere
Alcune versioni di vi hanno la possibilita' di salvare in modalita'
Unix ( no ^M) o in modalita' DOS ( con ^M )
Sostituzione in vi interattivo del ^M con nulla.
-- 
  Alberto 'JCN-9000' Varesio     AKA  BlueRider   AIX pSeries System Admin
  EADS-MDTV - Via Goito 51/A    Riding the world  Jeeper on Black '01TJ4.0
  10195 Grugliasco (TO) ITALY    on HONDA CB500    Phone: 
+39-011-415-8148
  mailto:
A-Va...@eads.matradatavision.com
 
A-Va...@eads.dnsalias.net
  Please 
http://www.fsf.org/philosophy/no-word-attachments.html
, thanks!
-- 
  BOFH Excuse: Someone hooked the twisted pair wires into the answering machine.

Ciao Alessandro
Grazie per il consiglio e per le prove che hai fatto, cmq io devo solo
trovarli e poi dopo cancellare, il fatto che non sia possibile fare una
ricerca di un carattere speciale con unix mi sembra assurdo.Ciao e grazie lo
stesso



opzionalemente, ci sono i comandi unix2dos e dos2unix
cat ha un opzione per visualizzare i codici non ascii (tra cui \r)
sed $'s/\r$//g' (bash)
sed 's/\r$//g' (tcsh)
tr -d $'\r' (bash)
tr -d '\r' (tcsh)
e numerosi altri

find . -type f -print |\
    while read file; do
        typeset -i crs
        crs=$(tr -cd '\015' < $file | wc -c)
        if [[ $crs = 0 ]]; then
            #echo "No ^M in $file"
        else
            echo "Found $crs ^M in $file"
        fi
    done

 sferirli in modalità ascii windows -> unix.
Per fare questo c'è una comoda utility in perl, mi pare. Si chiama
dos2unix e converte files dos in files unix-compliant. Io uso FreeBSD e
lo trovo nei ports. Se vi interessa posso spedirvelo.
Ciao ciao
--
Stucchi Massimiliano     | Gruppo Utenti FreeBSD Italia
WillyStudios.com         | 
http://www.gufi.org
 
stu...@willystudios.com
 | 
m...@gufi.org
"People who make no mistakes do not usually make anything"

  MURDOCK
ciao ...
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0}; printf("%s",c); return 0;}


Ciao Arrakis
Grazie ler aver risposto, la tua batch funziona, non capisco perchč il ^M
nella ricerca deve essere editato con il ctrl+^+m anzichč nel modo classico
e cioč shift+^+M, forse dipende dal sistema sun solaris che ha una
interpretazione diversa con i comandi della tastiera.
Ad ognimodo vabbene cosi, io e un mio collega l'abbiamo adattata a quello
che serviva fare:
trovi ogni file che contiene i ^M all'interno della direcory selezionata
find . -name 2>/dev/null "*" -exec grep -l ^M {} \;
trovi ogni file che contiene i ^M all'interno del file system
find / -name 2>/dev/null "*" -exec grep -l ^M {} \;
ciclo per pulire i file che contengono i ^M
for file in `find . -name 2>/dev/null "*" -exec grep -l ^M {} \;` ; dos2unix
$file $file; done.
Ciao Arrakis e grazie a tutti!!!


 interpretazione diversa con i comandi della tastiera.
Ciao, che io sappia in generale su tutti gli UNIX Flavor and UNIX/Like O.S
la sequenza CTRL+V sta ad indicare "Inserisci letteralmete il prossimo
carattere", ciò vuol dire che in generale affinchè il carattere speciale di
Carriege Return e o altri , possano essere interpretati dal vi o dalla shell
devono essere inseriti in questa modalità, mentre se usi porgrammi come tr
sed perl o si mili essi riconoscono anche la rappresentazione ottale,
esadecimale, backslash-escape sequences.
Ciao.