2011-11-12 15 views
58

Witam Próbuję przeszukać mój katalog szyn za pomocą polecenia grep. Szukam konkretnego słowa i chcę grep, aby wydrukować nazwę pliku i numer linii. Czy istnieje flaga grep, która zrobi to za mnie? Próbowałem użyć kombinacji -n i -l, ale są to wydruki nazw plików bez numerów lub po prostu wyrzucenie dużej ilości tekstu do terminala, którego nie da się łatwo odczytać.Grep nazwa pliku i numer linii

ex:

grep -ln "search" * 

Czy muszę go do rury awk?

Odpowiedz

88

myślę -l jest zbyt restrykcyjne, ponieważ hamuje wyjście -n. Sugeruję -H (--with-filename): Wydrukuj nazwę pliku dla każdego dopasowania.

grep -Hn "search" * 

Jeśli to daje zbyt dużą moc, spróbuj -o aby wydrukować tylko część, która pasuje.

grep -nHo "search" * 
21

grep -rin searchstring * | cut -d":" -f1-2

to powiedziałbym, szukaj rekurencyjnie (dla napisu 'searchstring' w tym przykładzie), zignorować sprawę i numery linii wyświetlacza. Wyjście z tego grep będzie wyglądać następująco:

/path/to/result/file.name:100: Line in file where 'searchstring' is found.

Następnie rury, które wynikają z poleceń cięcie przy użyciu dwukropka „:” jak nasze pola i separatora pól Wyświetlanie od 1 przez 2

Kiedy nie potrzebuję numerów linii, z których często korzystam: -f1 (tylko nazwa pliku i ścieżka). Następnie rura jest do Uniq tak, że widzę tylko każdego pliku kiedyś tak:

grep -ir searchstring * | cut -d":" -f1 | uniq

+0

Czuję, że to najlepiej odpowiada na oryginalne pytanie. Tylko nazwy plików i numery linii. – mastaBlasta

+1

Zauważ, że to nie działa, jeśli masz bezwzględne nazwy ścieżek systemu Windows, takie jak 'C: \ Users \ me \ git \', ponieważ zawiera już jeden dwukropek. – hirse

4

Lubię przy użyciu:

grep -niro 'searchstring' <path>

Ale to tylko dlatego, że zawsze zapomnieć o innych sposobów, a ja nie mogę zapomnieć Robert de grep - niro z jakiegoś powodu :)

+2

Właśnie zrealizowany dla Francuzów działa też "-noir";) –