Câu hỏi grep một tập tin, nhưng hiển thị một số dòng xung quanh?


tôi muôn grep cho một chuỗi, nhưng cũng hiển thị năm dòng trước và năm dòng sau cũng như dòng phù hợp. Làm thế nào tôi có thể làm điều này?


2756
2017-08-12 17:55


gốc


Tôi giữ một bản sao Kịch bản perl của Brendan Gregg xung quanh cho mục đích này. Hoạt động tốt. - Ethan Post
Để có giải pháp hoạt động trên Solaris, hãy xem liên kết này. - jahroy
man grep | grep -C 1 context :) - StvnW
man grep | grep -C 1 "\-C" ;) - Anders B


Các câu trả lời:


Dành cho BSD hoặc là GNU  grep bạn có thể dùng -B num để đặt số lượng dòng trước trận đấu và -A num cho số dòng sau trận đấu.

grep -B 3 -A 2 foo README.txt

Nếu bạn muốn cùng một số dòng trước và sau khi bạn có thể sử dụng -C num.

grep -C 3 foo README.txt

Điều này sẽ hiển thị 3 dòng trước và 3 dòng sau.


3679
2017-08-12 17:57



Nó là tốt nhưng tiếc là grep Solaris không hỗ trợ điều đó. Xem liên kết đó cho solaris: unix.com/solaris/33533-grep-display-few-lines-before-after.html - рüффп
Ok, nhưng nếu muốn thể hiện tất cả các dòng đầu ra sau trận đấu? grep -A0 và grep -A-1 không cắt nó ... - g33kz0r
không làm việc cho tôi vì một lý do nào đó, mặc dù được đề cập trong trang của tôi. - Hayri Uğur Koltuk
Nếu bạn là HP-UX env, không có phiên bản grep nào hoạt động giống như trong Solaris. Đã có thể sử dụng các liên kết Solaris nhưng thay thế chim ưng với awk trong liên kết đó. - zkarthik
-n là số dòng, nhưng đối với một số phiên bản grep -n # sẽ hiển thị # đường xung quanh (như -c) với số dòng. Đó là một lối tắt hữu ích, đó là điều tôi cần khi tôi cần ngữ cảnh. - Anthony DiSanti


-A và -B sẽ hoạt động, như sẽ -C n (cho n dòng ngữ cảnh) hoặc chỉ -n (cho n dòng ngữ cảnh).


520
2017-08-12 17:59



+1 - -5 nhanh hơn để nhập hơn -A 5 -B 5 - mouche


ack làm việc với các đối số tương tự như grep và chấp nhận -C. Nhưng nó thường tốt hơn cho việc tìm kiếm thông qua mã.


66
2017-09-07 11:13



ack cũng hỗ trợ -A -B. - Shuo
Ack tốt hơn grep theo nhiều cách. Nó nhanh hơn với cú pháp đơn giản hơn. - chim


grep astring myfile -A 5 -B 5

Điều đó sẽ grep "myfile" cho "astring", và hiển thị 5 dòng trước và sau mỗi trận đấu


32
2017-08-12 17:58



"grep astring myfile -C 5" sẽ làm tương tự - Syed Siraj Uddin


Tôi thường sử dụng

grep searchstring file -C n # n for number of lines of context up and down

Nhiều công cụ như grep cũng có các tệp con người thực sự tuyệt vời. Tôi thấy mình đề cập đến trang của grep rất nhiều vì có quá nhiều thứ bạn có thể làm với nó.

man grep

Nhiều công cụ GNU cũng có trang thông tin có thể có thêm thông tin hữu ích ngoài trang người đàn ông.

info grep

16
2017-08-12 18:42





Tìm kiếm "17655" trong "/some/file.txt" hiển thị 10 dòng ngữ cảnh trước và sau (sử dụng Awk), đầu ra được đặt trước với số dòng theo sau dấu hai chấm. Sử dụng điều này trên Solaris khi 'grep' không hỗ trợ tùy chọn "- [ACB]".

awk '

/17655/ {
        for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
                print before[i]
        }
        print (NR ":" ($0))
        a = 10
}

a-- > 0 {
        print (NR ":" ($0))
}

{
        before[b] = (NR ":" ($0))
        b = (b + 1) % 10
}' /some/file.txt;

8
2017-10-08 00:21





Sử dụng grep

$ grep --help | grep -i context
Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM

5
2018-01-12 11:25



Bạn đã không đọc câu trả lời được chấp nhận chưa? Bạn đang lặp lại những gì đã được nói về một câu hỏi gần 10 năm tuổi ... - Yokai
Tôi xin lỗi Yokai. Nhưng tôi không đọc bất cứ điều gì về grepping phần trợ giúp của grep để lấy câu trả lời. - Chiel ten Brinke