Skip to content

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

17 de lipiec de 2022
add8ac45 1024x437 1

Bash Shell

grepjest 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 grepwyświetli się filename:przed pasującą linią dla jasności. Możesz wyłączyć to zachowanie za pomocą -hflaga, 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-Hflagaco jest przeciwieństwem -hi 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

1658086164 243 Jak uzywac grep do wyswietlania nazw plikow i numerow linii

The -Hflaga ma inny nieoczekiwany, ale użyteczny efekt — w połączeniu z danymi wejściowymi z stdintakich jak rury Unix, zostanie wydrukowany (standard input):zamiast nazwy pliku.

1658086164 599 Jak uzywac grep do wyswietlania nazw plikow i numerow linii

Wyświetlanie numerów linii za pomocą grep

Możesz go również używać w połączeniu z -nflaga, aby uzyskać numer linii:

grep -Hn „foo”

1658086164 128 Jak uzywac grep do wyswietlania nazw plikow i numerow linii

Hack zgodny z POSIX

The -Hflaga 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/nulljako fałszywy drugi plik wejściowy do grepco skłania go do myślenia, że ​​istnieje wiele plików:

1658086164 910 Jak uzywac grep do wyswietlania nazw plikow i numerow linii

Czy ten post był pomocny?