Portál AbcLinuxu, 4. května 2025 15:29

Dotaz: nahrazení začínajících mezer značkami nbsp

19.12.2014 13:02 RM
nahrazení začínajících mezer značkami nbsp
Přečteno: 952×
Odpovědět | Admin
Nějaký nápad jak nahradit mezery v textu na začátku, třeba značkami (&)nbsp, za pomocí sedu?? Já zatím vymyslel tohle:

echho " Dobrý den, " | sed 's/^/ł/ ;:a;s/ł /łł/;ta;s/ł/\(&)nbsp;/g'

(&)=&
, kde si musím pomoct znakem, který se v textu s největší pravděpodobností nebude vyskytovat. Možná to ale jde i nějak méně krkolomně.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.12.2014 13:24 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba
echo "  Dobrý den, " | sed ':a;s/^\([[:space:]]*\)[[:space:]]/\1\ /;ta'
?
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
19.12.2014 14:05 RM
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
pěknýýý, to je přesně ono. A nebylo by k tomu ještě krátké vysvětleníčko toho reg. výrazu.
19.12.2014 14:09 RM
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
jen pozor na tu mezeru na konci, s tou se to zacyklí
19.12.2014 14:25 RM
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
ach so, ono se to tam vkládá od poslední mezery. Takhle je to už jasné:

echo "  Dobrý den, " | sed ':a;s/^\([[:space:]]*\)[[:space:]]/\1\./;l;ta'


díky
20.12.2014 18:03 RM
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
ani by mne nenapadlo, že to využiju ještě i k odbešení skriptu, kde potřebuju odseknout nuly na začátku (z 00030 dostat 30); už několikrát jsem nad tím dumal. Bash na to má tohle ${num##+(0)}, ale musí se nastavit shopt -s extglob, je to je hnus. Takhle je to lepčí:

echo 0030 | sed ':a;s/^\(0*\)0/\1/;ta'
dvojitá radost :), ať žije sed
22.12.2014 08:47 pet
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
Hmmm, a co je špatně na:
echo 0030 | sed 's/^0*//'
22.12.2014 18:06 RM
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
jasný... byl jsem až příliš unešen tím kouzlem (:a ta) a navíc jsem měl na paměti nefunkční obdobu bashovské substituce (tam to takhle nejde), to byl asi hlavní důvod, proč jsem hned skočil po kanónu; třeba vás napadne ještě nějaké jednodušší řešení i pro první případ?
29.12.2014 10:35 pet
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
Úvodní nuly v bash:
$ a=0030
$ echo $((10#$a))
30
$
A to nahrazování úvodních mezer moc elegantně nejde právě proto, že je to nahrazování.
29.12.2014 11:34 RM
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
zajímavé, tohle jsem v bashi neznal
14.1.2015 02:33 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: nahrazení začínajících mezer značkami nbsp
Odpovědět | | Sbalit | Link | Blokovat | Admin
A kdyby bylo zakázáno spouštět jakékoliv další procesy kromě Bashe, pak by se to dalo zařídit třeba takhle:
while IFS='' read line; do index=0; while [[ ' ' = "${line:index:1}" ]]; do ((++index)); echo -n ' '; done; echo ${line:index}; done
Ale nemusí to být za každou cenu one-liner. :-D
while IFS='' read line; do
    index=0
    while [[ ' ' = "${line:index:1}" ]]; do
        ((++index))
        echo -n ' '
    done
    echo ${line:index}
done

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.