2012-05-07 14 views
20

Chcę wyszukać słowo w wielu plikach i zwrócić tylko jedną linię na wynik lub ograniczoną liczbę znaków (na przykład 40 ~ 80 znaków), a nie całą linię, jak domyślnie.grep ograniczone znaki - jedna linia

grep -sR 'wp-content' . 

file_1.sql:3309:blog/wp-content 
file_1.sql:3509:blog/wp-content 
file_2.sql:309:blog/wp-content 

Obecnie widzę następujące:

grep -sR 'wp-content' . 

file_1.sql:3309:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without. 
file_1.sql:3509:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without. 
file_2.sql:309:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without. 
+0

http://theunixshell.blogspot.in/2012/12/print-first-80-characters-in-line.html – Vijay

Odpowiedz

17
egrep -Rso '.{0,40}wp-content.{0,40}' *.sh 

To nie wywoła Radio-Symphonie-Orchestra, ale -o (nly dopasowanie).

Maksymalnie 40 znaków przed i za wzorem. Uwaga: * e * grep.

+0

Działa świetnie, dzięki. –

+1

'egrep' jest teraz przestarzałe. Zamiast tego użyj 'grep -E'. – ruuter

+0

@ruuter: Na moim ostatnim Linuxie (xubuntu 15.10), egrep to 'exec grep -E" $ @ "'. AFAIK tak jest przez długi czas. –

4

Jeżeli zmienisz regex '^.*wp-content' można użyć egrep -o. Na przykład,

egrep -sRo '^.*wp-content' . 

-o flag zrobić egrep tylko wydrukować fragment wiersza, który pasuje. Zatem dopasowanie od początku linii do wp-content powinno dać wynik próbki w twoim pierwszym bloku kodu.

+0

Możliwe, że nie zrozumiałam poprawnie polecenia, ale nie zadziałał, nadal wyświetlał ten sam komunikat droga. –

+0

Jeśli twoja treść jest tym, co masz w swoim przykładzie, powinna wyprowadzać wszystko aż do "wp-treści" i nic poza tym. To powinno być takie samo wyjście w twoim pierwszym bloku kodu. Jednak sądząc po innych odpowiedziach, może to być lub nie być tym, czego naprawdę chcesz. –

+0

@PatrickMaciel Zobacz moje zmiany. Rozszerzyłem wyjaśnienie flagi '-o'. –

16

Można użyć kombinacji grep i pokroić

Korzystanie przykład chciałbym użyć:

grep -sRn 'wp-content' .|cut -c -40 
grep -sRn 'wp-content' .|cut -c -80 

Że daje pierwsze 40 lub 80 znaków odpowiednio.

edit:

Również tam flagę w grep, że można użyć:

-m NUM, --max-count=NUM 
      Stop reading a file after NUM matching lines. 

ten z kombinacją tego, co wcześniej napisał:

grep -sRnm 1 'wp-content' .|cut -c -40 
grep -sRnm 1 'wp-content' .|cut -c -80 

To powinno dać po raz pierwszy pojawia się na plik i tylko pierwsze 40 lub 80 znaków.

+0

Naprawdę wolę tę opcję, ponieważ nie trzeba modyfikować wyrażenia regularnego. –