Chcę dowiedzieć się i wyświetlić całkowitą liczbę podciągów TTT znalezionych w pierwszych 2000 wierszach w pliku.
Byłem przy użyciu grep aż Przetestowałem go i sobie sprawę, że nie identyfikuje podciągi.
Jeśli szukasz wystąpienia 3 kolejnych znaków „T” w pliku, możesz to zrobić za pomocą grep. Czego próbowałeś, co nie zadziałało? I, jeśli chcesz tylko sprawdzić pierwszych 2000 linie pliku, można rura wyjście głowicy polecenia do grep. Na przykład, head -n 2000 somefile.txt | grep "TTT"
jeśli chcesz uzyskać liczbę wierszy w pliku zawierającym „TTT”, możesz użyć:
head -n 2000 somefile.txt | grep -c "TTT"
Jeśli niektóre linie mogą mieć wiele wystąpień i chcesz policzyć wszystkie wystąpienia, a nie tylko liczbę wierszy zawierających „TTT”, użyj -o
opcji grep , która wyświetli każde wystąpienie w osobnej linii, a następnie potokuje wyjście do wc polecenie, które wyświetli liczbę wszystkich wystąpień „TTT” w pierwszych 2000 wierszach pliku:
head -n 2000 somefile.txt | grep -o "TTT" | wc -l
Wyjaśnienie
Zwykle wyszukiwanie
TTT
(3 T) wTTTTTT
(6 T) daje tylko 2 dopasowania, ponieważ wyszukiwanie następnego dopasowania odbywa się zaraz po znalezieniu poprzedniego dopasowania.Spróbuję zilustrować:
Rozwiązanie
Jeśli chcesz rozważyć
TTTTTT
cztery instancjeTTT
, sugeruję, abyś dopasował tylko jedną postać, a następnie użyj lookaround, aby ukończyć pasujący wzór.W swoim rozwiązaniu użyję lookahead:
Objaśnienia do
grep
części:grep
wyrażenia regularnego Perla, aby użyć lookahead; w moim systemie muszę to określić/usr/gnu/bin/grep
-P
aktywować tryb wyrażeń regularnych Perla-o
aby wyświetlić każde wystąpienie w osobnej linii, aby umożliwićwc -l
policzenie każdego dopasowania'T(?=TT)'
jest wyrażeniem regularnym do dopasowania, poT
którym następujeTT
(za pomocą lookahead); Po znalezieniu dopasowania silnik wyrażeń regularnych rozpocznie się od drugiej,T
aby spróbować znaleźć następne dopasowanie, umożliwiając, aby ta sekundaT
była częścią następnego dopasowania, jeśli jest zgodna ze wzorcem.Przykład
Używając przykładowego ciągu z komentarza:
i przetwarzanie go za pomocą powyższego wyrażenia regularnego:
będzie produkować:
co znaczy:
Ilustracja:
źródło