Jak używać grep do wyświetlania nazw plików i numerów linii przed dopasowaniem linii?
grep
jest narzędziem Linuksa powszechnie używanym do znajdowania zawartości pliku lub wszelkich przekazanych do niego danych wejściowych. Podczas przeszukiwania wielu plików, wyświetlanie nazwy pliku i numerów wierszy jest przydatne, zwłaszcza gdy jest używane do automatyzacji w skryptach powłoki.
Wyświetlanie nazw plików za pomocą grep
Domyślnie, jeśli przekażesz wiele plików do grep
, pojawią się one filename:
przed odpowiednią linią dla jasności. W rzeczywistości możesz wyłączyć to zachowanie za pomocą -h
flagi, która nigdy nie pokaże nazw plików:
Jeśli jednak przekażesz tylko jeden plik do programu grep
, domyślnie nie wyświetli on 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, a to może przerwać automatyzację, polegając na obecności nazwy pliku.
Prostym rozwiązaniem jest użycie -H
flagi pisanej wielkimi literami, która działa odwrotnie -h
i zawsze zawiera nazwy plików bez względu na wszystko, nawet jeśli tylko jeden plik jest przekazywany jako dane wejściowe.
grep -H "foo"file
Ta -H
flaga ma inny nieoczekiwany, ale użyteczny efekt: w połączeniu z input stdin
, takim jak potoki uniksowe, zostanie wydrukowana (standard input):
zamiast nazwy pliku.
Wyświetlanie numerów linii za pomocą grep
Możesz również użyć go wraz z -n
flagą, aby uzyskać numer linii:
grep -Hn "foo"
Hack zgodny z POSIX
Flaga -H
nie jest grep
zgodna z POSIX i nie jest dostępna w niektórych niejasnych systemach operacyjnych opartych na Uniksie. Na szczęście istnieje hack, którego można użyć, przekazując /dev/null
drugi plik jako fałszywe dane wejściowe grep
, które skłania go do myślenia, że istnieje wiele plików:
Dodaj komentarz