Portál AbcLinuxu, 8. července 2025 01:30


Dotaz: grep a vyhledani souboru s mezerou

10.2.2009 08:46 niolou | skóre: 1
grep a vyhledani souboru s mezerou
Přečteno: 626×
Odpovědět | Admin

Zdravim mam problem se soubory s mezerou v nazvu. Mam skript:

nasel=`grep -l -e $cislo *`

for vysledek in $nasel
    do
             echo "Soubor "$vysledek" obsahuje hledany retezec "$cislo                                     
             cat $CESTA/$vysledek | grep $cislo                                                                                      
    done

Vsechno funguje dobre jen do chvile nez vyhleda soubor, ktery ma v nazvu mezery. Napr. pro soubor "1 2.out" se pak provede cyklus dvakrat pro vysledek 1 a podruhe pro vysledek 2.out, ale jelikoz zadne takove soubory neexistuji tak pak selze cat. Hledal jsem reseni a nasel jsem neco jako IFS, ale moc jsem to nepochopil. Dekuji za rady

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.2.2009 09:03 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: grep a vyhledani souboru s mezerou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud by jste IFS nastavil pouze na \n, tak by to možná fungovalo, ale asi by to upadlo na souboru, který obsahuje znak nového řádku :-(.

Co to přepsat takhle?
for soubor in *; do
  if grep -e "$cislo" -q "$soubor"; then
    echo "Soubor $soubor obsahuje $cislo.";
    grep -e "$cislo" "$soubor";
  fi
done
Buď jak buď, určitě potřebujete vypisovat tu hlášku? -- takhle se totiž grep volá 2×.
I am always ready to learn although I do not always like to be taught. (W. Churchill)
10.2.2009 09:32 niolou | skóre: 1
Rozbalit Rozbalit vše Re: grep a vyhledani souboru s mezerou

Skript jsem pro tento dotaz zjednodusil, aby v nem bylo jen to potrebne. Tu hlasku mam podminenou parametrem z prikazove radky a opravdu ji vypisovat potrebuji.

  if [ -z $SOUBOR ]
  then
      nasel=`grep -l -e $cislo * | grep -v $DAVKA`
  else
      nasel=`grep -l -e $cislo * | grep -v $DAVKA | grep -v $SOUBOR`
  fi
         
    for vysledek in $nasel
    do
             cd $VYSTUP
             echo "Soubor "\"$vysledek\"" obsahuje hledany retezec "$cislo                                     

             if [ $VYPIS -eq 1 ]
              then
                  cat $CESTA/\"$vysledek\" | grep $cislo
             fi
                                                                                      
    done

Vase reseni funkcni je, ale cyklus se provadi nad kazdym souborem. Chtel jsem se vyhnout duplicite ve skriptu. Nejak me to vubec nemysli.

 

10.2.2009 09:42 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: grep a vyhledani souboru s mezerou
Nešel by na to úvodní hledání použít find? Pokud jsem to dobře pochopil, takhle prohledáte všechny soubory a pak filtrujete jen podle jména - něco jako
find -not -name "$DAVKA" | while read soubor; do
  if grep ...
  fi
done
BTW - pokud do $VYPIS místo 1 dáte true (a pro 0 pak false), můžete ten výpis zkrátit na
$VYPIS && grep "$cislo" "$CESTA$vysledek"
I am always ready to learn although I do not always like to be taught. (W. Churchill)
10.2.2009 09:48 niolou | skóre: 1
Rozbalit Rozbalit vše Re: grep a vyhledani souboru s mezerou

jj v podstate je to skript na vicenasobne hledani v souborech. Find me uz taky napadl. Dekuji

10.2.2009 21:02 Tomas
Rozbalit Rozbalit vše Re: grep a vyhledani souboru s mezerou
Odpovědět | | Sbalit | Link | Blokovat | Admin

nastudujte jaký je rozdíl mezi "$cislo" a $cislo

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.