Jak uzyskać numer linii z grep?


19

Następujący grep

grep -r -e -n coll *

wyświetli się

fullpath/filename:  <tag-name>coll</tag-name>

Chciałbym wiedzieć, który wiersz ma następujący tekst, próbowałem dodać -n, ale to nie działało. Próbowałem dodać | grep -n *, ale zrobiło to coś dziwnego.

To, co chciałbym zobaczyć (nie dbam o format) to

fullpath/filename:10:  <tag-name>coll</tag-name>

1
Podczas korzystania z -nopcji widzę numery linii . Czy możesz opublikować wynik tego, co dostajesz?
Kris Harper,

Odpowiedzi:


18

Powinieneś umieścić -ena końcu listy opcji:grep -rne coll *


16

nie ma potrzeby -r & -e!

uzyskaj numer linii wzoru!

grep -n "pattern" file.txt

jeśli chcesz uzyskać tylko numer wiersza jako wynik, dodaj do niego kolejne polecenie grep!

grep -n "pattern" file.txt | grep -Eo '^[^:]+'

1
Aby uzyskać tylko numer linii, łatwiej jest go użyć cut, np.cut -f1 -d:
wjandrea

1

Aby grepować wzór w określonym pliku i uzyskać pasujące linie:

grep -n <Pattern> <File> | awk -F: '{ print $1 }' | sort -u

lub używając cutzgodnie z sugestią @wjandrea:

grep -n <Pattern> <File> | cut -f1 -d: | sort -u

gdzie

  • <Pattern>jest cytowanym globalnym wzorcem (użyj opcji -Edla wyrażenia regularnego);
  • <File> to plik, który Cię interesuje;
  • pierwsza rura awk ...filtruje numery linii na wyjściu grep (przed :każdą linią);
  • druga rura zapewnia, że ​​numery linii pojawiają się tylko raz.

Aby uzyskać tylko numer linii, jest łatwiejszy w użyciu cutniż Awk, np.cut -f1 -d:
wjandrea

@wjandrea Łatwiejszy w jaki sposób?
Sheljohn

Mam na myśli, że składnia jest prostsza
wjandrea

@wjandrea To brzmi bardzo obiektywnie.
Sheljohn

@wjandrea Przepraszam za sarkazm, zredagowałem, aby dołączyć twoją sugestię :)
Sheljohn
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.