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?


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

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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.