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).