Portál AbcLinuxu, 10. května 2025 22:16

Dotaz: BASH - Odstranění mezer

27.2.2013 12:38 Jakubysko
BASH - Odstranění mezer
Přečteno: 1071×
Odpovědět | Admin
Dobrej den, může mi prosím někdo napsat, jak můžu v proměné
AAA="      das as dsa ssd    asdd sd       ";
odstranit pouze mezery na začátku a na konci toho řetězce? Děkuji

Ř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

27.2.2013 13:12 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Odpovědět | | Sbalit | Link | Blokovat | Admin
Čistě prostředky shellu např. takto
while test "${AAA# }" != "$AAA"; do AAA="${AAA# }"; done
while test "${AAA% }" != "$AAA"; do AAA="${AAA% }"; done
Řešení 1× (Jan Šimák)
27.2.2013 13:33 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Odpovědět | | Sbalit | Link | Blokovat | Admin
Čistě prostředky shellu např. takto
shopt -s extglob
AAA=${AAA/#+( )}
AAA=${AAA/%+( )}
If you hold a Unix shell up to your ear, you can you hear the C.
27.2.2013 15:34 cronin | skóre: 49
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Viera, že shell rovná sa bash je cesta do pekla.
27.2.2013 16:59 chrono
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Možno to bol príklad pre Korn Shell (ktorý funguje aj v Bash). ;)
27.2.2013 17:30 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
No dobre, dobre. Tak mi to uslo. Obvykle medzi shellom a bashom rozlisujem. Ale pre vlastne pouzitie dost vyuzivam veci, ktore ma bash nad uroven POSIX shellu. Znacne to spohodlnuje zivot a zrychluje vykonavanie.
If you hold a Unix shell up to your ear, you can you hear the C.
27.2.2013 17:48 cronin | skóre: 49
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Ok, no problem. Ja som odchovaný na Solarise a FreeBSD, takže som trochu háklivý na bashizmy. :-)
27.2.2013 20:42 Sten
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi nejlépe sedem:
echo "$AAA" | sed 's/^ *\(.*[^ ]\) */\1/'
28.2.2013 09:02 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Když už použiješ sed, tedy nemá to být čistě v shellu, tak pokud možno s příkazem, na kterém je na první pohled vidět, co dělá:
sed 's/^ *//;s/ *$//'
28.2.2013 16:40 Sten
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
V zadání není, že to má být čistě v shellu.

A ono to vidět není? Prostě seberu celý text, vyberu z něj tu část bez mezer okolo a tu vypíšu.
28.2.2013 17:22 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
BASH - Odstranění mezer je u mne odstranění mezer pomocí bashe. Pokud někdo chce odstranit mezery ve skriptu s použitím čehokoli, tak nemá cpát do titulku bash.
28.2.2013 08:52 cronin | skóre: 49
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ak nie je skutočne nutné rozlišovať medzi "medzerami" a "bielymi znamkmi" alebo IFS, tak by som to nekomplikoval:
AAA=`echo ${AAA}`
28.2.2013 08:57 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Tohle nejen odstraní mezery na koncích, ale také každou souvislou skupinu bílých znaků uvnitř změní na jednu mezeru. Což z uvedeného příkladu asi nebude cílem.
28.2.2013 09:03 cronin | skóre: 49
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Pán má pravdu. Že sú vo vstupnom reťazci násobné medzery aj vo vnútri a majú byť zachované, mi ušlo.
28.2.2013 09:55 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Ano. Ale šlo by využít jiný špinavý trik:
  read AAA <<<"$AAA"
28.2.2013 12:01 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Hm, to je pekne. Napriek tomu, ze vsetky zlozky toho poznam a bezne pouzivam, tak takato kombinacia ma nenapadla a ked som to potreboval, tak som to robil cez `echo`
If you hold a Unix shell up to your ear, you can you hear the C.
28.2.2013 18:05 potato
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
To je fakt pěkný špinavý trik.
28.2.2013 16:38 Zaboj Campula
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kdyz cisty shell a navic opravdu bourne shell tak trebas

unset B

for I in $AAA; do B=$B$I; done

AAA=$B
28.2.2013 16:56 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH - Odstranění mezer
Špatně, navíc z důvodu, který už tu byl zmíněn.

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.