2012-05-07 43 views
20

Tôi muốn tra cứu một từ trong nhiều tệp và chỉ trả lại một dòng cho mỗi kết quả hoặc số ký tự có giới hạn (40 ~ 80 ký tự) chứ không phải toàn bộ dòng, theo mặc định.grep giới hạn ký tự - một dòng

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 

Hiện nay tôi thấy như sau:

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

Trả lời

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

Điều này sẽ không gọi Radio-Symphonie-Orchestra, nhưng -o (nly matching).

Tối đa 40 ký tự trước và sau mẫu của bạn. Lưu ý: * e * grep.

+0

Hoạt động tuyệt vời, cảm ơn. –

+1

'egrep' hiện không còn được dùng nữa. Sử dụng 'grep -E' để thay thế. – ruuter

+0

@ruuter: Trên Linux gần đây của tôi (xubuntu 15.10), egrep là 'exec grep -E" $ @ "'. AFAIK đây là trường hợp trong một thời gian dài. –

4

Nếu bạn thay đổi regex để '^.*wp-content' bạn có thể sử dụng egrep -o. Ví dụ:

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

Cờ -o làm egrep chỉ in ra phần của dòng khớp. Vì vậy, so khớp từ đầu dòng đến wp-content sẽ mang lại kết quả đầu ra mẫu trong khối mã đầu tiên của bạn.

+0

Tôi có thể không hiểu đúng lệnh nhưng không hoạt động, anh ấy vẫn liệt kê tương tự đường. –

+0

Nếu nội dung của bạn là những gì bạn có trong ví dụ của bạn, nó sẽ xuất tất cả mọi thứ lên đến 'wp-content', và không có gì quá. Đó sẽ là cùng một đầu ra trong khối mã đầu tiên của bạn. Tuy nhiên, đánh giá bởi các câu trả lời khác, có thể hoặc có thể không phải là những gì bạn thực sự muốn. –

+0

@PatrickMaciel Xem các thay đổi của tôi. Tôi mở rộng lời giải thích của tôi về lá cờ '-o'. –

16

Bạn có thể sử dụng một sự kết hợp của grep và cắt

Sử dụng ví dụ của bạn tôi sẽ sử dụng:

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

Điều đó sẽ cung cấp cho bạn 40 hoặc 80 ký tự đầu tiên tương ứng.

chỉnh sửa:

Ngoài ra, theres một lá cờ trong grep, mà bạn có thể sử dụng:

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

này với sự kết hợp của những gì tôi đã viết trước đó:

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

Điều đó sẽ cung cấp cho lần đầu tiên bạn xuất hiện cho mỗi tệp và chỉ có 40 hoặc 80 ký tự đầu tiên.

+0

Tôi thực sự thích tùy chọn này vì bạn không cần phải sửa đổi regex của mình. –

Các vấn đề liên quan