Portál AbcLinuxu, 14. května 2025 00:48

Dotaz: Řeším podmínku,pokud existuje soubor a obsahuje "#poznamka"

26.5.2011 23:23 Joz
Řeším podmínku,pokud existuje soubor a obsahuje "#poznamka"
Přečteno: 211×
Odpovědět | Admin
Řeším podmínku,pokud existuje soubor a obsahuje přesný string "#poznamka"
if [ -f $file -a ... ];then
Jakým způsobem by to šlo udělat? Díky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.5.2011 23:34 kopancek | skóre: 3
Rozbalit Rozbalit vše Re: Řeším podmínku,pokud existuje soubor a obsahuje "#poznamka"
Odpovědět | | Sbalit | Link | Blokovat | Admin
je to uplne easy, nabuduce man grep...

if [ -f $file -a `grep -c '#poznamka' $file` -gt 0 ]; then echo "je tam"; fi
27.5.2011 01:06 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Řeším podmínku,pokud existuje soubor a obsahuje "#poznamka"

Zdravim,

existancia daneho suboru este nie je dovod na radost. Je treba vediet, ci su garantovane prava pre citane, kedze ho budeme citat. Napr. takto:

if [[ -r "${file}" && "$(grep '#poznamka' "${file}")" ]]; then echo 'je tam'; fi

Grep totizto vracia exit status s hodnotou jedna (neuspech), ak sa dany pattern nenajde.

Slo by to ale aj inak, ak vyuzijeme predchadzajucu moju poznamku:

if grep '#poznamka' "${file}" 2>/dev/null; then echo 'je tam'; fi

Ak subor existuje, je citatelny a nachadza sa tam dany pattern, tak sa vypise 'je tam'. Ak bude niektora z podmienok nesplnena, tak prinajhorsom hodi chybu, ale tie sa nam nezobrazia, lebo vsetky chyby su presmerovane do /dev/null .

27.5.2011 01:35 zulu
Rozbalit Rozbalit vše Re: Řeším podmínku,pokud existuje soubor a obsahuje "#poznamka"
grep -qs
27.5.2011 12:46 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Řeším podmínku,pokud existuje soubor a obsahuje "#poznamka"

Dakujem za tip. ;)

Druhy priklad je u mna zle, bo presmerovava len chyby do /dev/null. Takze bud takto:

if grep '#poznamka' "${file}" &>/dev/null; then echo 'je tam'; fi

alebo takto, ako mi bolo poradene:

if grep -qs '#poznamka' "${file}"; then echo 'je tam'; fi
27.5.2011 05:51 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Řeším podmínku,pokud existuje soubor a obsahuje "#poznamka"
if [ -f $file -a `grep -c '#poznamka' $file` -gt 0 ]
špatně, protože pokud soubor nebude čitelný (-r), tak grep nevypíše žádné číslo, a budete mít syntax mišmaš.
if [ -r $file -a `grep -c '#poznamka' $file` -gt 0 ]
to už by mělo fungovat, ale je to moc komplikované
if [[ `grep -c '#poznamka' $file` -gt 0 ]]
tohle už by mělo zvládnout i nečitelnost souboru, ale je možné že autor [[ nechce

Ideální řešení je podle mne to nejjednodušší:
if grep '#poznamka' &>/dev/null; then
Pokud se grepu nepodaří objevit poznámku v souboru (ať už z jakéhokoliv důvodu), vrátí hodnotu interpretovanou jako false, jinak true.
27.5.2011 07:35 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Řeším podmínku,pokud existuje soubor a obsahuje "#poznamka"
Souhlasím s posledním řešením, jen přes návratovou hodnotu grepu. Test na návratové hodnotou je v shellu často mnohem jednodušší, než řešit textový výstup nástroje.

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.