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