Snažím se najít soubory obsahující konkrétní slovo pomocí grep
. V adresáři je mnoho souborů (> 500)
Příkaz I run
$ grep 'delete' *
Výstup
validate_data_stage1:0
validate_data_stage2:0
validate_data_stage3:0
validate_data_stage4:0
validate_data_stage5:0
validate_input_stage1:0
validate_input_stage2:0
validate_input_stage3:0
validate_input_stage4:0
.... and hundred of such lines
Toto jsou soubory, které neobsahují danou shodu. Chci potlačit zobrazování těchto řádků na stdout. Znám -q
přepínač, ale to by potlačilo celý výstup, což nechci.
Jak to udělám?
Přijatá odpověď:
To je chování, které vykazuje grep -c
.
Pravděpodobně máte soubor, jehož název začíná -
a obsahuje c
a používáte GNU grep bez nastavení POSIXLY_CORRECT
proměnná prostředí.
Použijte:
grep -- delete *
nebo lépe:
grep delete ./*
--
označí konec možností, takže název souboru nebude považován za možnost (s GREP POSIX by tomu tak nebylo, protože nevolba delete
argument by znamenal konec možností), ale neřešil by problém souboru s názvem -
. grep delete ./*
je robustnější, ale má nevýhodu v tom, že na výstupu je navíc ./
pro shodu souborů (ačkoli to může být považováno za bonus, protože to pomáhá identifikovat názvy souborů, které obsahují znaky nového řádku).