Mam kilka plików dziennika. Muszę dowiedzieć się, ile razy łańcuch występuje we wszystkich plikach.
grep -c string *
zwroty
...
file1:1
file2:0
file3:0
...
Za pomocą potoku udało mi się uzyskać tylko pliki, które mają jedno lub więcej wystąpień:
grep -c string * | grep -v :0
...
file4:5
file5:1
file6:2
...
Jak mogę uzyskać tylko łączną liczbę? (Jeśli to wróci file4:5, file5:1, file6:2
, chcę odzyskać 8.)
grep file1 file2 --options
Odpowiedzi:
źródło
grep -c string<*
po prostu zastępując przestrzeń na mniej niż.grep -o
a jednocześniewc -l
działa. kot jest szybszy w przypadkach takich jak oryginalne pytanie.Działa to dla wielu wystąpień w wierszu:
źródło
grep -o string * --exclude-dir=some/dir/one/ --exclude-dir=some/dir/two | wc -l
.grep -ioR string * | wc -l
to jest to, czego używam do wyszukiwania bez rozróżniania wielkości liter, rekurencyjnego wyszukiwania tylko z dopasowaniemgrep -rc test . | awk -F: '$NF > 0 {x+=$NF; $NF=""; print} END{print "Total:",x}'
policzy wiele wystąpień w linii
źródło
grep -oh "... my that curry was strong" * >> wc
:)Zamiast używać -c, po prostu potokuj go do wc -l.
Spowoduje to wyświetlenie każdego wystąpienia w jednej linii, a następnie policzy liczbę linii.
Pominie to jednak przypadki, w których ciąg występuje ponad 2 razy w jednej linii.
źródło
Jedna z rzadkich przydatnych aplikacji
cat
.źródło
Coś innego niż wszystkie poprzednie odpowiedzi:
źródło
Możesz dodawać
-R
do wyszukiwania rekurencyjnie (i unikać używania cat) i-I
ignorować pliki binarne.źródło
Obowiązkowe rozwiązanie AWK:
Uważaj, jeśli twoje nazwy plików zawierają „:”.
źródło
Rozwiązanie AWK, które obsługuje również nazwy plików, w tym dwukropki:
Należy pamiętać, że ta metoda nadal nie wykrywa wielu wystąpień
string
tej samej linii.źródło
Jeśli chcesz liczbę wystąpień na plik (przykład dla ciągu „tcp”):
Przykładowe dane wyjściowe:
Wyjaśnienie:
grep -RIci NEEDLE .
- wyszukuje rekurencyjnie ciąg NEEDLE z bieżącego katalogu (następujące dowiązania symboliczne), ignorując pliki binarne, licząc liczbę wystąpień, ignorując wielkość literawk ...
- to polecenie ignoruje pliki o zerowym wystąpieniu i formatuje liniesort -hr
- sortuje wiersze w odwrotnej kolejności według liczb w pierwszej kolumnieOczywiście działa również z innymi poleceniami grep z opcją
-c
(liczba). Na przykład:źródło
Możesz użyć prostego,
grep
aby skutecznie uchwycić liczbę wystąpień. Wykorzystam tę-i
opcję, aby upewnićSTRING/StrING/string
się, że zostaniesz poprawnie przechwycony.Wiersz poleceń podający nazwę plików:
Wiersz polecenia, który usuwa nazwy plików i drukuje 0, jeśli istnieje plik bez wystąpień:
źródło
krótki wariant rekurencyjny :
źródło
Tylko rozwiązanie Grep, które testowałem z grep dla Windows:
To rozwiązanie policzy wszystkie wystąpienia, nawet jeśli jest ich wiele w jednej linii.
-r
rekurencyjnie przeszukuje katalog,-o
„pokaże tylko część wiersza pasującego WZORZEC” - to właśnie dzieli wiele wystąpień w jednym wierszu i powoduje, że grep drukuje każde dopasowanie w nowym wierszu; następnie potokuj wyniki rozdzielone znakiem nowej linii z powrotem do grep,-c
aby policzyć liczbę wystąpień przy użyciu tego samego wzorca.źródło
Oto szybszy niż grep alternatywny sposób AWK, który obsługuje wiele dopasowań w
<url>
wierszu, w kolekcji plików XML w katalogu:Działa to dobrze w przypadkach, gdy niektóre pliki XML nie mają podziałów linii.
źródło
Kolejny oneliner korzystający z podstawowych funkcji wiersza poleceń obsługujących wiele wystąpień w wierszu.
źródło