Mam plik, który prawdopodobnie zawiera złe formatowanie (w tym przypadku wystąpienie wzorca \\backslash
). Chciałbym użyć grep
do zwrócenia tylko numerów linii, w których to występuje (tak jak w przypadku, dopasowanie było tutaj, przejdź do linii # x i napraw to).
Jednak wydaje się, że nie ma sposobu na wydrukowanie numeru wiersza ( grep -n
), a nie dopasowania lub samego wiersza.
Mogę użyć innego wyrażenia regularnego, aby wyodrębnić numery wierszy, ale chcę się upewnić, że grep nie może tego zrobić samodzielnie. grep -no
wydaje mi się, że jest najbliżej, ale nadal wyświetla dopasowanie.
grep -no
:! Zrobiłem to, co przyjechałem tutaj, aby spróbować! (tzn. nie drukuj linii, która jest czasami bardzo długa, np. zminimalizowane pliki źródłowe javascript.)Odpowiedzi:
próbować:
źródło
-f
param. Dla mnie to było-f2
. (Wiem, że to stare rzeczy, ale myślę, że mogłoby to pomóc niektórym biednym duszom)grep -n "text to find" file.ext | cut -f1,2 -d:
pokazuje nazwę pliku i numer linii.-H
aby wymusić wyświetlenie nazwy pliku, gdy jest tylko jeden plik. I odwrotnie, zawsze możesz użyć polecenia,-h
aby nie wyprowadzać nazwy pliku, bez względu na to, ile plików grepujesz.Jeśli jesteś otwarty na używanie AWK:
W tym przypadku FNR to numer linii. AWK to świetne narzędzie, gdy patrzysz na grep | cut lub gdy chcesz pobrać wyjście grep i manipulować nim.
źródło
NR
działa również wtedy, gdy badany jest tylko jeden plik, jak w tym przypadku.Wszystkie te odpowiedzi wymagają, aby grep wygenerował całe pasujące wiersze, a następnie przesłał je do innego programu. Jeśli twoje linie są bardzo długie, może być bardziej efektywne użycie seda do wyświetlenia numerów linii:
źródło
Wersja Bash
źródło
Polecam odpowiedź z
sed
iawk
do dopiero się numer linii, zamiastgrep
dostać całą linię dopasowania i następnie usunięcie że od wyjścia zcut
lub innego narzędzia. Aby uzyskać kompletność, możesz również użyć Perla:lub Ruby:
źródło
Będziesz potrzebował drugiego pola po dwukropku, a nie pierwszego.
grep -n "text to find" file.txt | cut -f2 -d:
źródło
Aby policzyć liczbę wierszy pasujących do wzorca:
Aby wyodrębnić dopasowany wzór
Aby wyświetlić numery wierszy, do których dopasowano wzór
źródło
używając tylko grepa :
grep -n "text to find" file.ext | grep -Po '^[^:]+'
źródło