2012-05-14 8 views
29

Có phải grep có khả năng cung cấp số dòng mà từ đó được chỉ định xuất hiện không?Tìm số dòng nơi một từ cụ thể xuất hiện với "grep"

Ngoài ra, bạn có thể sử dụng grep để tìm kiếm một từ bắt đầu từ một số dòng nhất định xuống dưới?

+1

Tôi tin rằng điều này phù hợp hơn với [SuperUser] (http://superuser.com/). –

+4

@dunsmoreb Tôi không đồng ý. 'grep' là công cụ của một lập trình viên nhiều như một công cụ người dùng quyền lực. –

+0

Tôi sử dụng 'grep' mọi lúc. Nhưng điều này thực sự không phải là một câu hỏi liên quan đến lập trình. –

Trả lời

44

Sử dụng grep -n để nhận số dòng của đối sánh.

Tôi không nghĩ rằng có cách để bắt đầu một số dòng nhất định. Vì điều đó, hãy dùng sed. Ví dụ, để bắt đầu từ dòng 10 và in số dòng và dòng cho dòng phù hợp, sử dụng:

sed -n '10,$ { /regex/ { =; p; } }' file 

Để có được chỉ số dòng, bạn có thể sử dụng

grep -n 'regex' | sed 's/^\([0-9]\+\):.*$/\1/' 

Hoặc bạn chỉ đơn giản là có thể sử dụng sed:

sed -n '/regex/=' file 

Kết hợp hai lệnh sed, bạn nhận được:

sed -n '10,$ { /regex/= }' file 
+0

Ok, vì vậy grep -n sẽ trả về dòng có chứa các từ VÀ số dòng. Có anyway để có được số dòng CHỈ? –

+0

@OneTwoThree Xem chỉnh sửa của tôi. –

+0

@OneTwoThree Điều đó có phù hợp với bạn không? –

3

Bạn có thể gọi tail +[line number] [file] và ống nó để grep -n trong đó cho thấy số dòng:

tail +[line number] [file] | grep -n /regex/ 

Vấn đề duy nhất với phương pháp này là số dòng báo cáo của grep -n sẽ [line number] - 1 ít hơn số dòng thực tế trong [file].

1

Hoặc Bạn có thể sử dụng

grep -n . file1 |tail -LineNumberToStartWith|grep regEx 

này sẽ chăm sóc đánh số các dòng trong tập tin

grep -n . file1 

này sẽ in cuối cùng-LineNumberToStartWith

tail -LineNumberToStartWith 

Và cuối cùng nó sẽ grep dòng mong muốn của bạn (trong đó sẽ bao gồm số dòng như trong tập tin orignal)

grep regEX