2010-09-15 36 views
5

Tôi muốn hiển thị tất cả các dòng từ một trong đó phù hợp với biểu thức chính quylàm thế nào để hiển thị tất cả các dòng từ một phù hợp với regex trong linux

nếu tôi có một tập tin

foo 
bar123 
baz12435 
lorem 
ipsum 
dolor 
sit 
amet 

display-from baz[0-9]* < file Linh hồn trở lại này (Nó doesn 't quan trọng nếu nó hiển thị dòng phù hợp hay không)

lorem 
ipsum 
dolor 
sit 
amet 

làm thế nào tôi có thể làm điều này trong Linux (với sed, awk hoặc grep)

Trả lời

5
sed -e '/baz[0-9]*/,$b' -e 'd' file 

này sẽ xóa tất cả các dòng từ đầu vào ngoại trừ những từ dòng đầu tiên phù hợp với regex (/ baz [0-9] * /) để kết thúc tệp ($).

4

Chỉ cần sử dụng grep:

$ grep -E 'baz[0-9]*' file -A9999 

Ở đây, '-A' tùy chọn cho grep bao nhiêu dòng để hiển thị sau trận đấu. Đó là một chút clunky, nhưng nếu có một giới hạn trên trên chiều dài của các tập tin đầu vào của bạn, nó có thể làm việc OK.

-1

Tôi sử dụng grep để tìm kiếm từ khóa trong tệp. Tôi sử dụng như sau:

 
Syntax => grep pattern filename 
examlpe 
grep amet /path_to_file 
1

sử dụng awk

awk '/baz/{f=1;next}f' file 
5

Câu trả lời được chấp nhận in dòng trong đó bao gồm các mô hình. Nếu bạn muốn loại trừ dòng:

sed '1,/baz[0-9]*/d' file 

Một phiên bản đơn giản của câu trả lời được chấp nhận:

sed -ne '/baz[0-9]*/,$p' file 

Một số phiên bản của sed không cần -e trừ trong những trường hợp nhất định (nhưng chấp nhận nó anyway) và một số thì có. Những ví dụ này minh họa cho cả hai loại.

-1
ruby -ne 'print unless 1 .. /baz[0-9]/' file 
Các vấn đề liên quan