Portál AbcLinuxu, 15. května 2025 18:34

Dotaz: Jak smazat nadbytečné mezery

23.10.2012 13:01 Marky
Jak smazat nadbytečné mezery
Přečteno: 871×
Odpovědět | Admin
Ahoj, nedaří se mi odstranit nadbytečné mezery v proměné
tohle funguje super
cat input.txt | sed 's/[ \t]*$//' > output.txt

ale tohle ne
"$HEADING" | sed -e 's/^[ \t]*//' > "$HEADING"
poradí mi někdo jiný způsob? 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

23.10.2012 13:19 Kit
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin
A k čemu tam máš ten cat? A co vlastně máš v proměnné $HEADING?
sed -e 's/^[ \t]*//' <"$HEADING" >output.txt
23.10.2012 14:49 Marky
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
A k čemu tam máš ten cat? A co vlastně máš v proměnné $HEADING? V proměnné HEADING je pouze čistý text, nic jiného tam neni + samozřejmě nadbytečné mezery... ;)
sed -e 's/^[ \t]*//' <"$HEADING" >output.txt
potřebuji to upravit v té proměnné, ne to posílat do souboru, jde to? Ten cat je asi uklep.
23.10.2012 13:32 mike
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin
HEADING=$(echo $HEADING | sed -e 's/../../')
23.10.2012 13:40 Kit
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Nic proti tvému příspěvku, ale stejně by mě zajímalo, kdy uživatelé Bashe konečně přestanou cpát data aplikací do proměnných.
23.10.2012 14:04 mike
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Mam promennou HEADING ktera odkazuje na nejaky retezec, v tomto retezci chci odstranit vsechny mezery. O jakych datech aplikace tu mluvime?
23.10.2012 14:12 Kit
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Jak už jsem psal, to nebylo míněno na tebe. My vůbec netušíme, co se nachází v proměnné $HEADING. Obávám se, že "cat input.txt" nebo jiná hloupost.
23.10.2012 14:50 Marky
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
HEADING=$(echo $HEADING | sed -e 's/../../')
Tento kód žádné mezery neodstraní...
23.10.2012 15:11 mike
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
A co tento kod? :)
remove_spaces='sudo rm -rf /'; HEADING=$($remove_spaces)
23.10.2012 15:13 Kit
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Ten určitě ne. Vyžaduje rootovské heslo a to by zdržovalo zpracování :-)
23.10.2012 14:44 Marky
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin
V proměnné HEADING je pouze čistý text, nic jiného tam neni..
23.10.2012 14:54 Kit
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
V tom případě byl asi nejblíž mike. Trochu bych to jen upravil:
HEADING=$(echo "$HEADING" | sed -e 's/^[ \t]*//')
ale dá se to i zkrátit a zjednodušit:
HEADING="${HEADING// /}"
23.10.2012 15:05 Kit
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
resp. takto:
HEADING="${HEADING//[	 ]/}"
Uvnitř hranatých závorek je jeden tabulátor a jedna mezera.
23.10.2012 15:26 Marky
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hm, to funguje ale zase to odstraní všechny mezery, ne jen ty nadbyteční :-( Zeptám se tedy jinak, vidím že to takto jednoduše nejde. Jak můžu odstranit mezery v řetězci před prvním znakem a za posledním znakem? Díky
23.10.2012 16:10 Kit
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Jo tys chtěl odstranit jen ty okrajové? Myslel jsem, že všechny. V tom případě to asi bez toho sedu nepůjde.
HEADING=$(echo "$HEADING" | sed 's/^[ 	]*//;s/[ 	]*$//')
23.10.2012 17:04 Marky
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Ne jen ty okrajové, jak jsem již psal v dotazu, všechny nadbytečné, čili zepředu, zezadu, mezi slovama když jsou třeba 2 mezery atd..
23.10.2012 17:51 Kit
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
To je dobrá sranda. No nevím, třeba mě za to nějaký sedař zpucuje, ale líp to asi neumím:
HEADING=$(echo "$HEADING" | sed 's/[ 	]\+/ /g;s/^ //;s/ $//')
K čemu to tak precizně potřebuješ? Běžně to programům nevadí.
Řešení 1× (Goheeca)
26.10.2012 02:50 Dedek
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
No já nevím, ale je to vůbec potřeba hnát přes nějaký extra kód? Nestačí to prostě jen takto?
HEADING="         dffdsf  ds  sfdf    sdf            sdf  sdf sdf sf                reree  we wr wr                         "
HEADING=$(echo $HEADING)
echo "$HEADING" // dffdsf ds sfdf sdf sdf sdf sdf sf reree we wr wr
26.10.2012 09:07 okko
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
to je fakt dobré, funguje to i na tabelátory. To si budu muset někam poznamenat.
23.10.2012 21:51 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Jak smazat nadbytečné mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin
Len v cistom bashi a bez podprocesov:
$ shopt -s extglob
$ a="1    2 3 "
$ a="${a//+( )/ }"
$ a="${a# }"
$ a="${a% }"
$ echo "=$a="
=1 2 3=
Ked to chces aj s odstranovanim tabelatorov, tak 3. riadok nahradit:
a="${a//+([$IFS])/ }"
A komu sa nepaci trik s IFS, tak ho nahradit
spacetab=\ $'\t'
a="${a//+([$spacetab])/ }"
If you hold a Unix shell up to your ear, you can you hear the C.

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.