Aby grepować 20 znaków po meczu i przed nim

15

Mam problem, dla którego po meczu otrzymuję zbyt wiele informacji

grep -RnisI --color=auto "pseudomonas" *

Chcę uzyskać tylko 20 znaków lub 10 słów po meczu i przed nim.

Jakie jest właściwe narzędzie do zrobienia czegoś takiego?

Léo Léopold Hertz 준영
źródło
1
Twój zestaw opcji jest nieco dziwny, gdy narzekasz na zbyt wiele informacji. Chcesz jedną linię po i przed swoją mecz wyświetlany ( -A1i -B1wzgl.), Ale to jest zbyt dużo? Gdzie dokładnie chcesz przyciąć swoją produkcję?
Andreas Wiese
1
Czy możesz podać przykładowe dane wejściowe i wyjściowe, których oczekujesz?
Ramesh,
Zmieniłem polecenie, testuję w Ubuntu 13.10, daj mi znać, czy to działa dla ciebie. Mam opcję grep i opcję egrep
Eric
Zobacz także kontekst pasującego wyrażenia regularnego
Stéphane Chazelas

Odpowiedzi:

24
cat file.txt | grep -o -P '.{0,20}string.{0,20}'

To powinno zrobić dla ciebie

Aktualizacja:

Jeśli nie chcesz cat, możesz po prostu użyć grep z plikiem jako parametrem:

grep -o -P '.{0,20}pseudomonas.{0,20}' FileName.html

Ponadto, -P używa Perl Regex, który według stron man jest eksperymentalny, jeśli chcesz uniknąć tej flagi, możesz zamiast tego użyć egrep:

grep -Eo '.{0,20}yourstring.{0,20}' yourtestfile.txt
Eric
źródło
Jaki masz brzydki plik testowy;)
Ouki
Reszta pliku jest naprawdę przydatna, to jest część wieloliniowego komentarza w środku schematu, który musiał zostać wykluczony bez zerwania naszego parsera, była to po prostu dobra linia do wypróbowania.
Eric
Ponieważ jest to jeden z moich plików, ustawiono go na 755, ale widzę, że cat może nie być idealny dla pliku HTML, możesz spróbować przekazać nazwę pliku do grep jako parametru, zobacz moją edycję.
Eric
Rozumiem przez 777 plików, że masz 777 kopii różnych plików, a nie chown. Uruchamiam $$$ egrep -o '. {0,20} pseudomonas. {0,20}' * $$$. Komenda pozostaje tam nieskończoność i nic nie robi. To znowu wydaje się działać $$$ egrep -ori '. {0,20} pseudomonas. {0,20}' * $$$. To samo dotyczy rekurencji i rozróżniania wielkości liter. Jest jednak bardzo wolny. Myślę, że nie powinno być tak wolno. Grep był znacznie szybszy.
Léo Léopold Hertz
jeśli catting nie działa, zawsze możesz po prostu umieścić go w pliku, dodając > results.txtdo końca polecenia, ale nie powie ci, w którym pliku go znalazłeś.
Eric
4
pcregrep -MnirIso '(?s).{0,20}pseudomonas.{0,20}' . |
  grep --color -e '^' -e pseudomonas

Zakłada, że ​​dopasowania i ich kontekst nie pokrywają się, a nazwy plików nie zawierają pseudomonas.

Zauważ również, że zgłaszane numery wierszy pochodzą z początku kontekstu.

Stéphane Chazelas
źródło