Portál AbcLinuxu, 14. května 2025 01:12
grep 'PageSize\[3370 2383\]' *.*, tak to funguje a najde retezec, ale jakmile to dam do skriptu
#!/bin/bash for f in *.ps; do if [ `grep 'PageSize\[3370 2383\]' $f` ] then format="A0" else format="neni" fi echo $f-$format done, tak uz ne. Problem asi bude, ze ten radek, co najde grep vypada cely takto
" <</PageSize[3370 2383]>> setpagedevice"Vypis po probehnuti skriptu:
./reformat3: line 5: [: 2383]>>: binary operator expected a0.ps-neniMyslim ze man grep jsem precet cely a regularni vyrazy taky, ale porad me nic netrklo.
if [ "`grep 'PageSize\[3370 2383\]' $f`" ]
`echo ls`je to isté ako keby tam bolo
ls
[ string ]
se chape stejne jako [ -n string ]
, tedy podminka na nenulovou delku retezce (jinak z nej nezbude skutecne nic a [ si stezuje na chybejici poviny parametr). Proto jsou take potreba ty uvozovky kolem, aby prazdny vystup grepu byl chapan jako prazdny retezec. ALE, tohle cele je ponekud mimo, protoze grep sam o sobe vraci navratovy kod 0 (= true) prave tehdy, kdyz nasel hledany vyraz. Tedy hranate zavorky a zpetne uvozovky nepridaji nic navic.
if `grep 'PageSize\[3370 2383\]' "$f" &>/dev/null`(dá sa použiť aj parameter -q a -s)
if grep -qs "regexp..." "$f"; then
...
fi
/dev/null
samozřejmě použijeme -q
Pokud grep
neco grepne, vraci nulu. Ten test
je tam IMHO zbytecny.
for f in *.ps do format="neni" grep 'PageSize\[3370 2383\]' $f && format"A0" echo $f-$format done
/dev/null
.
grep 'PageSize\[3370 2383\]' $f > /dev/null && format"A0"
-q
, že?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.