Jak używać grep do wyświetlania nazw plików i numerów linii przed dopasowaniem linii?

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 grepzgodna 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

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *