regulérní výraz v bash-i

Tom Hudec Tom na ABBA.cz
Čtvrtek Březen 7 19:09:55 CET 2002


range ()
{
     C="${1-1}";
     M="${2-0}";
     N="${3}";
     while [ "$C" -le "$M" ]; do
         printf "%0${N}d\n" "$C";
         C="$(($C+1))";
     done
}

$ range 8 12 5
00008
00009
00010
00011
00012

BzF wrote:
> Dobrý den,
> potřebuji udělat následující věc pomocí bashe a už nevím jak dál:
> Ten skriptik by měl vypsat rozsah zadaných čísel a před ně doplnit nuly.
> - tedy dle ukázky (viz. níže):
> 	0001
> 	...
> 	0009
> 	0010
> 	...
> 	0099
> 	0100
> 	...
> 	0999
> 	atd
> 
> v reálu bude snad maximálně 6 úrovní (v ukázce jen 4) čili maximálně 999999
> (v ukázce jen 9999);
> pro 100 000 - 999 999 (v ukázce 1000-99999) se už žádná nula přidávat
> nebude (tolik toho snad nikdy nebude)
> (ale pokud se to bude řešit proměnnou, tak to asi bude jedno)
> 
> Problém mám v tom, že bych chtěl, aby bylo možno interaktivně zadat i počet
> nul, které se mají před čísla doplnit (před jednotky - tedy1-9), a pro každý
> další řád (desítky, stovky ...), aby se jejich počet o jednu snížil.
> (tedy určit, jestli to začne při zadání pěti 0 vypisovat:
> 	000001
> 	000002
> 	...
> 	000010
> 	000011
> 	...
> nebo při zadání dvou 0 vypisovat:
> 	001
> 	002
> 	...
> 	010
> 	011
> 	...
> 
> nechci žádné kontroly na to, jestli počet řádů cílového čísla je menší
> než počet nul, jestli je Od menší než Do atd...(pokud to bude zapotřebí,
> tak to už tam zvládnu dodělat))
> A ne to mít tak ošklivě (i když taky funkčně, ale s nutností rejpat
> se v tom) zbastlené.
> 
> 
> Dík
> BzF
> 
> (tohle je jen kostra na ukázku, o co mi jde, ve skutečnosti to bude 
> složitější, ale s tím už si poradím, resp. mám to hotovo, jen ty nuly musím
> před použitím upravit ručně)
> 
> ----------zacatek----------
> #!/bin/bash
> 
> echo "Zadej Od kolika cislovat"
> read number0
> 
> echo "Zadej Do kolika cislovat"
> read number1
> echo
> 
> while [ "$number0" -le "$number1" ]
> 
> do
>     if [ $number0 -lt 10 ];
> 	then
> 	    echo "000$number0";
>     fi
> 
>     if [ $number0 -ge 10 ] && [ $number0 -lt 100 ];
> 	then
> 	    echo "00$number0";
>     fi
> 
>     if [ $number0 -ge 100 ] && [ $number0 -lt 1000 ];
> 	then
> 	    echo "0$number0";
>     fi
> 
>     if [ $number0 -ge 1000 ] && [ $number0 -lt 10000 ];
> 	then
> 	    echo "$number0";
>     fi
> 
>     if [ $number1 -ge 10000 ];
> 	then
> 	    echo "Prilis velke cislo";
> 	    exit 1
>     fi
> 
> number0=`expr $number0 + 1`
> done


-- 
Tom Hudec <Tom(at)ABBA.cz>, editor of Tom's ABBA pages http://ABBA.cz/

   .''`.  The box said Windows, NT or better, so I installed Linux. :-)
  : :' :
  `. `'   Debian GNU/Linux  http://www.debian.org/  http://www.debian.cz/
    `-    The Perfect OS - the most software, the most people



Další informace o konferenci Linux