Portál AbcLinuxu, 12. května 2025 15:47

Dotaz: /bin/bash^M: chybný interpretr

15.7.2013 09:40 Petr
/bin/bash^M: chybný interpretr
Přečteno: 987×
Odpovědět | Admin
Při zadání příkazu: sed -i 's/{ctrl-v}{ctrl-m}//g'+ filename.sh mi vyjede chyba: sed: -e výraz č. 1, znak 22: neznámý přepínač pro „s“

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.7.2013 10:32 Kit
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vadí mu to "+" na konci. Nepatří tam.
15.7.2013 10:38 Petr
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Nejde mi to ani bez toho +
15.7.2013 10:45 Kit
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Určitě se však změnila chybová hláška. Nevidím ji tady.
15.7.2013 10:46 Petr
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
je stejná to + sem tam předtím ani nezadával
15.7.2013 10:51 Kit
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Nemůže být stejná. 22. znak je právě to "+", které tam nepatří. Bez něho mi to funguje. Možná se ti tam vecpal nějaký řídicí znak, který nevidíš. Zkus ten příkaz napsat znovu.
Řešení 1× (Ash)
15.7.2013 10:57 potato
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Z nadpisu, který nesouvisí s textem dotazu (to je fakt tak těžké napsat smysluplný nadpis?), usuzuji, že tazatel chce odstraňovat znak ASCII 13. Takže {ctrl-v}{ctrl-m} tam nemá být jako literál, ale měl ty klávesové kombinace stisknout, když to psal -- pak ten výraz ale nemůže mít 22 znaků...
15.7.2013 11:01 Kit
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
To vím. Otázkou je, zda to ví i Petr.
Řešení 1× (Ash)
15.7.2013 10:51 potato
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Odpovědět | | Sbalit | Link | Blokovat | Admin
Výraz neměl kde nabrat 22 znaků, má mít 6 znaků, takže je tam nějaký bordel. Co přesně znamená to tvoje {ctrl-v}{ctrl-m}? Použij raději
sed -i 's/\r//g' ...
(GNU).
Tarmaq avatar 16.7.2013 09:14 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
IMHO to odnekud kopirovat a prepsal to s tim {ctrl-v}{ctrl-m} misto toho aby ty klavesy stisknul a objevil se tam znak ^M. Tvoje reseni je ale samozrejme spravne
Don't panic!
16.7.2013 10:13 Petr
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Zadal sem: sed -i 's/\r//g' a je po problému. Děkuji
16.7.2013 11:00 Kit
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Někdy je vhodnější použít recode, který se postará nejen o nadbytečné CR, ale i o kódování češtiny v textu.
16.7.2013 12:10 Ash | skóre: 53
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
nebo dos2unix
16.7.2013 13:07 Kit
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
dos2unix neřeší kódování češtiny. Pokud se ve skriptu nějaká čeština nachází, stejně je nutné text překódovat. recode udělá obojí.
18.7.2013 10:29 Ash | skóre: 53
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Jistě, pokud je potřeba změnit konce řádků a zároveň chci ještě překódovat češtinu, recode to jak už jste řekl zvládne obojí.

Ten dos2unix jsem myslel na změnu těch konců řádků dal jsem to pod špatný post.
16.7.2013 14:54 R
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Alebo fromdos.
16.7.2013 20:03 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Proč vůbec používat sed s jeho mašinerií parsování regulárních výrazů na něco, co je už z principu práce pro tr?
16.7.2013 20:08 Kit
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Protože když mám v ruce kladivo, všechno vypadá jako hřebík :-)
16.7.2013 20:17 potato
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Protože -i.

Jinak zrovna tohle je práce pro dos2unix/recode/... Proč řešit, jak vypadají v různých systémech konce řádků na úrovni bajtů, když lze problém formulovat na vyšší úrovni?
18.7.2013 10:35 Ash | skóre: 53
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
A proč vůbec odstraňovat všechny znaky CR, když ve skutečnosti chci odstranit jen CR před LF? Podle mne dos2unix nebo sed -i -e "s/\r\n/\n/".
18.7.2013 10:56 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Jistě. Ale zatímco dos2unix nemusí být všude k dispozici, u tr nebo sedu je to riziko podstatně menší. Co se přesného chování vůči nestandardním posloupnostem CR a LF týká, tak tam by se muselo nejdřív přesně definovat, jaké chování se považuje za "správné". Slušně vychovaný textový soubor by měl obsahovat buď jen LF nebo jen CRLF (nebo jen CR, bereme-li v úvahu i jablečné).
18.7.2013 11:12 Ash | skóre: 53
Rozbalit Rozbalit vše Re: /bin/bash^M: chybný interpretr
Proto říkám dos2unix nebo sed. Uznávám že neslušný soubor do kterého by někdo naivně namlátil CR někam dovnitř do kódu si zaslouží aby byl nejlépe pomocí tr nebo sed s/\r// neznehodnocen a viník tímto odhalen a potrestán :D

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.