Bash kereso script

Fórumok

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.

Hozzászólások

"grep -i": case insensitive keresés

FILES=`grep -i "ezt keresem" *.par | cut -f1 -d':' | sort | uniq`

É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

é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!

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 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]`"

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)

öö, 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..

Hi!

-name helyett -iname kell, es akkor case insensitive lesz.

By(t)e
TBS::Antiemes