Szukam znaleźć i zastąpić w gigantycznym zrzucie bazy danych i nie robi tego, co moim zdaniem powinno się zdarzyć. Chciałbym grep dla mojego ciągu docelowego w pliku, a następnie zobaczyć około 8 znaków otaczających (w zależności od tego może być konieczne dostosowanie tej liczby). Jak mogę to zrobić?
Powodem, dla którego nie mogę tego zrobić, jest to, że istnieje wiele setek, jeśli nie tysiące dopasowań. Chcę uzyskać pewną liczbę znaków otaczających ciąg, a następnie potokować go uniq
lub coś, aby zobaczyć, dlaczego moje wyszukiwanie i zamiana mają nieoczekiwane zachowania.
Ponadto w tej samej linii może znajdować się wiele dopasowań!
text-processing
grep
string
użytkownik394
źródło
źródło
Odpowiedzi:
Prosty sposób użycia
grep
byłby podobnyLiczba kropek odpowiada liczbie znaków przed / po grepowanym tekście. Ta
-o
opcja powoduje, żegrep
dane wyjściowe są tylko zgodne, a nie całe wiersze.Aby użyć
uniq
na wyjściu, pamiętaj, że najpierw musisz posortować dane wyjściowe. Tak zazwyczaj byś zrobiłJeśli interesuje Cię liczba trafień dla każdego meczu, możesz uzyskać dobre wyniki za pomocą
źródło
grep -o '.\{8\}yourtext.\{8\}'
. Jest to nieco mniej zawrotne niż liczenie 8 kropek.Począwszy od odpowiedzi @rozcietrzewiacz, mogę rozwinąć do
źródło
-o
daje tylko pierwszy mecz, gdy dwa mecze pokrywają się:echo 'aaabbbccc' | grep -o 'bb