Jak sformatować dane wyjściowe grep, aby wyświetlały numery linii na końcu linii, a także liczbę trafień?

378

Używam grep, aby dopasować ciąg znaków w pliku. Oto przykładowy plik:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt zwroty

example two null,
example four null,

Jak mogę zwrócić dopasowane linie wraz z ich numerami linii, tak jak to:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

Wiem, że -c zwraca całkowitą liczbę pasujących linii, ale nie wiem, jak poprawnie sformatować, aby dodać total null countz przodu, i nie wiem, jak dodać numery linii.

Co mogę zrobić?

Londyn
źródło

Odpowiedzi:

600

-n zwraca numer linii.

-ijest w przypadku ignorowania wielkości liter. Stosować tylko wtedy, gdy dopasowanie wielkości liter nie jest konieczne

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Połącz z, awkaby wydrukować numer linii po meczu:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

Użyj podstawienia polecenia, aby wydrukować całkowitą liczbę zerową:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2
dogbane
źródło
czy mogę to sformatować, dodając numery wierszy po zamiast przed za pomocą:?
Londyn,
Twoje rozwiązanie wydaje się w porządku, ale pojawia się błądawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
Londyn,
przepraszam, przełączyłem się na Linuksa, teraz działa :) była to wersja systemu Windows niezbyt dobra
Londyn
1
... rycerze, którzy mówią -ni, że tak pamiętasz tę sztuczkę
santiago arizti
59

Użyj -nlub --line-number.

Sprawdź man grepwiele innych opcji.

Andy Lester
źródło
3
nowy użytkownik Linuksa nie chce czytać strony podręcznika man. Ale jeśli użyją wystarczająco Linuksa, przywykną do niego :) Jest to bardzo przydatne :)
Dzung Nguyen
19
Nie zawsze leniwy (ale czasem), często nowy użytkownik Linuksa ma problem ze zrozumieniem strony podręcznika. (Mogą wydawać się tajemnicze)
TecBrat,
czasami strona podręcznika może zająć wiele stron. I trudno jest je wszystkie odczytać
Eugen Konkov
7

posługiwać się grep -n -i null myfile.txt aby wypisać numer linii przed każdym dopasowaniem.

Nie sądzę, aby grep miał przełącznik do drukowania liczby pasujących linii, ale możesz po prostu przesłać wyjście grep do wc, aby osiągnąć:

grep -n -i null myfile.txt | wc -l
jhenninger
źródło
3
-c wydrukuje wszystkie dopasowane linie
dpatchery
Masz rację. Niestety tłumi również normalną moc wyjściową.
jhenninger
7

Lub użyj awkzamiast tego:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file
Zsolt Botykai
źródło
4

grepznajdź linie i wypisz numery linii, ale nie pozwala ci „programować” innych rzeczy. Jeśli chcesz dołączyć dowolny tekst i wykonać inne „programowanie”, możesz użyć awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

Lub tylko przy użyciu powłoki (bash / ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"
ghostdog74
źródło
3

lub w perlu (dla kompletności ...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'
Hannes
źródło
2

Odnośnik do linux komendy linux http://linuxcommand.org/man_pages/grep1.html

do wyświetlenia numeru wiersza, wiersza kodu i pliku użyj tego polecenia w swoim terminalu lub cmd, GitBash (Obsługiwane przez terminal)

grep -irn "YourStringToBeSearch"
Vrushal Raut
źródło
1

Pomyślałem, że w przyszłości mogę ci pomóc. Aby wyszukać wiele ciągów i numerów linii wyjściowych i przeglądać dane wyjściowe, wpisz:

egrep -ne 'null|three'

pokaże:

2:example two null,  
3:example three,  
4:example four null,   

egrep -ne 'null|three' | less

wyświetli wynik w krótszej sesji

HTH Jun

Uczciwy Abe
źródło