Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
World of Warcraft

Novinky: Školení nejen k OS Ubuntu pro širokou veřejnost, více informací zde.

Autor Téma: jak se zbavim z promenne znaku '^M'  (Přečteno 3391 krát)

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
  • Karma: +15/-12
    • Zobrazit profil
jak se zbavim z promenne znaku '^M'
« kdy: 23 Květen 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 :)

nettezzaumana

  • Host
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #1 kdy: 23 Květen 2008, 12:03:00 »
prozrad vic. nechapu problem .. uka na prikladu

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
  • Karma: +15/-12
    • Zobrazit profil
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #2 kdy: 23 Květen 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

nettezzaumana

  • Host
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #3 kdy: 23 Květen 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" ??
« Poslední změna: 23 Květen 2008, 12:56:10 od nettezzaumana »

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
  • Karma: +15/-12
    • Zobrazit profil
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #4 kdy: 23 Květen 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

nettezzaumana

  • Host
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #5 kdy: 23 Květen 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'
« Poslední změna: 23 Květen 2008, 13:32:09 od nettezzaumana »

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
  • Karma: +15/-12
    • Zobrazit profil
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #6 kdy: 23 Květen 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.

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
  • Karma: +120/-11
    • Zobrazit profil
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #7 kdy: 23 Květen 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?

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
  • Karma: +15/-12
    • Zobrazit profil
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #8 kdy: 23 Květen 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 :)
« Poslední změna: 23 Květen 2008, 19:35:48 od tomaskCZ »

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
  • Karma: +120/-11
    • Zobrazit profil
Re: jak se zbavim z promenne znaku '^M'
« Odpověď #9 kdy: 24 Květen 2008, 07:55:17 »
tak na to koukam a taky mi to dela. asi to bude zpusobeno programem ssh.