Portál AbcLinuxu, 8. července 2025 01:30
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
, tak by to možná fungovalo, ale asi by to upadlo na souboru, který obsahuje znak nového řádku for soubor in *; do if grep -e "$cislo" -q "$soubor"; then echo "Soubor $soubor obsahuje $cislo."; grep -e "$cislo" "$soubor"; fi doneBuď jak buď, určitě potřebujete vypisovat tu hlášku? -- takhle se totiž grep volá 2×.
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.
find -not -name "$DAVKA" | while read soubor; do if grep ... fi doneBTW - 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"
nastudujte jaký je rozdíl mezi "$cislo"
a $cislo
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.