Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: tomaskCZ 23 Května 2008, 12:01:38

Název: jak se zbavim z promenne znaku '^M'
Přispěvatel: tomaskCZ 23 Května 2008, 12:01:38
Tailovanim souboru vznikleho programem script se mi dostava do promnenych tento specialni znak, ktery je normalne neviditelny,lze ho nejakym keycode vyradit jako treba mezeru ?

Podobny problem mam i u zachytavanych vypisu VT100 terminalu :)
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: nettezzaumana 23 Května 2008, 12:03:00
prozrad vic. nechapu problem .. uka na prikladu
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: tomaskCZ 23 Května 2008, 12:33:02

tady je vystupni soubor, rozbal ho a podivej se dovnitr vi, nebo jinym zpusobem, ktery odhali specialni znaky

http://web.iol.cz/tomkcz/2008-05-23.ssh.dd.log.zip

soubor se vytvari jako vystup tohoto prikazu

gnome-terminal --geometry=110x40+200+200 --window-with-profile=blue -x script -a $log -c "/usr/bin/ssh $1" #2>error.txt"

ja pak resim treba
ifxx=`tail -3 ~/2008-05-23.ssh.nn.log | sed -n '1p' | awk '{ print $3$4$5$6$7}'`
if [ ${ifxx%% *} = 'Nameorservicenotknown' ];then
........

jenze se mi to nikdy s nicim neporovna, prootoze se mi do toho michaji ty '^M' znaky
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: nettezzaumana 23 Května 2008, 12:54:07
nevim, jak se Ti dari ony znaky, ale me to funguje s nasledujicim vyrazem ::
cat 2008-05-23.ssh.dd.log | sed '/^ssh:/!d;s/^.*://;s/\s//g' | tail -n 1

takze ::
Kód: [Vybrat]
> ifxx=`cat 2008-05-23.ssh.dd.log | sed '/^ssh:/!d;s/^.*://;s/\s//g' | tail -n 1` && if [ "${ifxx%% *}" = 'Nameorservicenotknown' ];then echo ok; else echo failed; fi
ok

ad.1) nac tahle "${ifxx%% *}" hruza? nestaci "$ifxx" ??
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: tomaskCZ 23 Května 2008, 13:11:45
znaky se tam dostanou z prikazu script, ktery pouzivam k logovani session, protoze gnome-terminal to sam o sobe neumi. Ta hruza je tam z pokusu kdy jsem zkousel odstranit mezery jestli se tam nedostavaji.

tvuj postup funguje, nicmene budu si muset vzit manual k sedu to presne polustit, dik
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: nettezzaumana 23 Května 2008, 13:27:46
/^ssh:/!d; // emulace grepu. vypisujeme pouze radky zacinajici ssh
             s/^.*://; // nahradime nicim vse od zacatku radku po posledni ':'
                       s/\s//g // nahradime globalne nicim vsechny prazdne znaky (\s)

ad.2) manual k sedovskym RE najdes jako ::
man perlre
man perlreref // pripadne jako 'man perlrequick || man perlretut'
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: tomaskCZ 23 Května 2008, 15:27:08
supr, nasel jsem ty ruzne     \w \W \s \S \d \D na http://perldoc.perl.org/perlre.html

umel by jsi take vyresit odstraneni pouze toho ^M na konci radky ?
Sbiram data z jednoho vt100 terminalu expect skriptem, necham ukladat do souboru a na konci kazde radky je ^M, porad mi nevychazi jak toho zmetka presne zacilit,  \s potazmo \W funguji, ale vezmou sebou vsechny mezery a znaky.

To ^M bude asi nejake odrolovani, ci co, rozhodi to pak treba i terraterm pri zobrazovani.
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: kkaarreell 23 Května 2008, 15:37:19
Tady tenhle znak se objevuje, pokud soubory pouzivaji dosovske zakonceni radku (CR+LF), zatimco unix pouziva pouze LF (nebo ten druhej, sakra). Na prevadeni souboru mezi temato dvema formaty slouzi napr. programy unix2dos nebo dos2unix. Takze otazka? Mohou se ti v tom souboru nejak objevit dosovske konce radku?
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: tomaskCZ 23 Května 2008, 15:59:06
nemeli by, prvni pripad je linux a ssh zachytavane pres script (man script),
                  tzn. lze zkusit normalne z prikazovy radky v ubuntu     '/usr/bin/ssh (nejaky nedostupny cil) 2>chyba.txt'
                   a v souboru chyba.txt je na konci ^M ( neni to viditelny znak, nutno pouzit nejaky editor) , takze to prijde z ssh

               druhy pripad je z unixu na vt100 terminal (seriovy port),

asi vec, jak jde ktery vystup z aplikace, ale v tomto pripade se to dosu nikde ani nedotkne
pravda je, ze predani dale na do2unix to odstrani a je to vyresene
/usr/bin/ssh dd 2>&1 | dos2unix > chyba.txt
ale v sedu mi to prijde ponekud necilovatelne :)
Název: Re: jak se zbavim z promenne znaku '^M'
Přispěvatel: kkaarreell 24 Května 2008, 07:55:17
tak na to koukam a taky mi to dela. asi to bude zpusobeno programem ssh.