Hello!
Vannak STM-es *.par filejaim.
Ezek szoveges parameter filek.
Ezekben szeretnek a scriptemmel rakeresni erre arra.
Irtam is egy scriptet, az alabbi logikaval:
#!/bin/bash
DIR=$HOME
FILE=*.par
for find_out in $( find $DIR -name $FILE ); do
for cat_out in $(cat $find_out); do
if [ "$1" = "$cat_out" ]; then
lista1="$lista1 $find_out"
fi
done
done
echo $lista1
A problema az, hogy szeretnem azt elerni, hogy a kisbetu
ne szamitson. Tehat ha azt irtam a fileba, hogy
Si picture vagy si picture s ezutan rakeresek az
si vagy az Si szora akkor is ugyan azt kapjam.
Probalkoztam a greppel is az alabbi modon:
if [ -n "$(grep -G $1[^[:alnum:]] $find_out)" ]; then
lista1="$lista1 $find_out"
fi
De ez is erzekeny a kis/nagy beture s ha nincs szokoz
az emlitett pl.: Si utan akkor nem is talalja meg.
A [^[:alnum:]] resz azert kel mert enelkul ra talal pl
a Size-ben levo Si-re is, ami hibas eredmeny.
Emiatt is tertem at a cat-es megoldasra, de a kis/nagy betu-t
nem tudom megoldani.
S mas otletem nincs mert vegyesz vagyok nem programozo :D
(Az STM-egy szkennelo alagut mikroszkop, amit solarissal
lehet vezerelni. Igy a tobbi geben linux van.)
Bocs az ekezet miatt de kulfoldon vagyok s nincs ekezetem.
- 2232 megtekintés
Hozzászólások
"grep -i": case insensitive keresés
FILES=`grep -i "ezt keresem" *.par | cut -f1 -d':' | sort | uniq`
- A hozzászóláshoz be kell jelentkezni
Én inkább a sed-et próbálnám...
sed -n "
# keresendo kif. 1.
/regularis kifejezes 1/ p
# keresendo kif. 2.
/regularis kifejezes 2/ p
# es igy tovabb
" *.par
--
maszili
- A hozzászóláshoz be kell jelentkezni
én még a find-nak az -exec kapcsolóját tudnám a figyelmedbe ajánlani, mert a for ciklussal -bár a bash parancssora igen hosszú lehet- más shell/oprendszer alatt belefuthatsz a parancssor méretkorlátjába is!
- A hozzászóláshoz be kell jelentkezni
Ha a greppet jo mert a -i vel
ki lehet kapcsolni a kis/nagy betut.
De a [^[:alnum:]] tag nelkul hasznalom
minden olyan file eredmeny lesz amiben
vannak olyan szavak amiben az Si szerepel
pl a Size szerepel minden file-ban.
Ha [^[:alnum:]] a kifejezest akkor
az a baj csak azikat a kifejezesekre talal ra ami utat szokoz van.
Pl a TIP szerepel minden fileban, de nem talalja meg igy :(.
A cat-os megoldas a legjobb csak, meg kellene ugy oldani
az ossze hasonlitast hogy ne szamitson a kis/nagy betu.
- A hozzászóláshoz be kell jelentkezni
ha jol ertem akkor az eredeti szkriptben a
# if [ "$1" = "$cat_out" ];
helyett kellene irnod ezt:
# echo "$cat_out" | grep -xi "$1"; if [ $? -eq 0 ];
- A hozzászóláshoz be kell jelentkezni
echo "$cat_out" | grep -xi "$1"; if [ $? -eq 0 ];
Ez mukodik :D
Meghozza jol, modjuk egy kicsit lassu.
Ja s igy megjelenik a kepernyon a talalat is,
Ha igy modositom az jo?:
echo "$cat_out"| grep -xi "$1" >>/dev/null; if [ $? -eq 0 ];
- A hozzászóláshoz be kell jelentkezni
ja igen, az atiranyitast kifelejtettem;
'>>/dev/null' helyett eleg '>/dev/null' -t irni
- A hozzászóláshoz be kell jelentkezni
a masik megoldas a tr lett volna, sebesseg ugyeben nem tudok nyilatkozni;
ha pl. nincsenek ekezetes betuid, akkor (ugyanez a sor helyett) irhatod ezt is:
if [ "`echo "$cat_out" | tr [a-z] [A-Z]`" = "$UPCASED_ARG_1" ];
ahol UPCASED_ARG_1 -nek a szkript elejen adsz erteket igy:
UPCASED_ARG_1="`echo "$1" | tr [a-z] [A-Z]`"
- A hozzászóláshoz be kell jelentkezni
Koszi mindketto mukszik, kb ugyan akkora sebessegel,
lehet, hogy azert mert most van 7 teszt file, s igy
kb 6000-szer fut le a fenti for ciklus.
Habar ugyan ennyiszer futott le a regi modszerral is,
de ott ciklusonkent kevesebb volt a muvelet.
Nem tudom, de mukszik az a lenyeg nekem.
(3000 MHZ-s P4-em van, nem celeron)
- A hozzászóláshoz be kell jelentkezni
öö, mégvalami eszembe jutott, a tr-t fileonként egyszer futtatva lehet, hogy gyorsabb lenne..
#!/bin/bash
DIR=$HOME
FILE=*.par
UPCASED_ARG_1="`echo "$1" | tr [a-z] [A-Z]`"
for find_out in $( find $DIR -name $FILE ); do
for cat_out in $(cat $find_out | tr [a-z] [A-Z]); do
if [ "$UPCASED_ARG_1" = "$cat_out" ]; then
lista1="$lista1 $find_out"
fi
done
done
echo $lista1
bash-bol nem nagyon lehet jobbat kihozni..
- A hozzászóláshoz be kell jelentkezni
JAJA
Igy mar hasit :D
Koszi a segitseget, igy tokeletes is a dolog,
mar amenyit a bash-bol ki lehet hozni :D
- A hozzászóláshoz be kell jelentkezni
Hi!
-name helyett -iname kell, es akkor case insensitive lesz.
By(t)e
TBS::Antiemes
- A hozzászóláshoz be kell jelentkezni
Hi
Mar mint a file-ban levo szovegre kell
case insensitive-nek lennie.
A finddal semmi gond.
De azert kosz.
- A hozzászóláshoz be kell jelentkezni