
grep
jest narzędziem Linuksa powszechnie używanym do wyszukiwania zawartości plików lub dowolnych danych wejściowych do niego. Podczas przeszukiwania wielu plików przydatne jest wyświetlanie nazwy pliku i numerów wierszy, zwłaszcza gdy używa się ich do automatyzacji skryptów powłoki.
Wyświetlanie nazw plików za pomocą grep
Domyślnie, jeśli przekazujesz wiele plików do grep
wyświetli się filename:
przed pasującą linią dla jasności. Możesz wyłączyć to zachowanie za pomocą -h
flaga, która nigdy nie wyświetli nazw plików:
Jeśli jednak przekażesz tylko jeden plik do grep
, domyślnie nie wyświetla nazw plików. Może to stanowić problem podczas automatyzacji za pomocą skryptów powłoki, ponieważ możesz nie wiedzieć, ile plików znajduje się w katalogu, i może to spowodować przerwanie automatyzacji w oparciu o znajdującą się tam nazwę pliku.
The proste rozwiązanie polega na użyciu wielkich liter-H
flagaco jest przeciwieństwem -h
i zawsze włączy nazwy plików bez względu na wszystko, nawet jeśli tylko jeden plik zostanie przekazany jako dane wejściowe.
grep -H „foo” file
The -H
flaga ma inny nieoczekiwany, ale użyteczny efekt — w połączeniu z danymi wejściowymi z stdin
takich jak rury Unix, zostanie wydrukowany (standard input):
zamiast nazwy pliku.
Wyświetlanie numerów linii za pomocą grep
Możesz go również używać w połączeniu z -n
flaga, aby uzyskać numer linii:
grep -Hn „foo”
Hack zgodny z POSIX
The -H
flaga w grep
nie jest zgodny z POSIX i nie jest dostępny w niektórych bardziej niejasnych systemach operacyjnych opartych na Uniksie. Na szczęście istnieje hack, którego możesz użyć, pomijając /dev/null
jako fałszywy drugi plik wejściowy do grep
co skłania go do myślenia, że istnieje wiele plików: