Làm thế nào để có được số dòng từ grep?


18

Các grep sau

grep -r -e -n coll *

sẽ hiển thị

fullpath/filename:  <tag-name>coll</tag-name>

Tôi muốn biết dòng nào có văn bản sau, tôi đã thử thêm -n, nhưng nó không hoạt động. Tôi đã thử thêm | grep -n *, nhưng nó đã làm một cái gì đó kỳ lạ.

Những gì tôi muốn thấy (tôi không quan tâm đến định dạng) là

fullpath/filename:10:  <tag-name>coll</tag-name>

1
Tôi thấy số dòng khi sử dụng -ntùy chọn. Bạn có thể gửi đầu ra của những gì bạn nhận được?
Kris Harper

Câu trả lời:


18

Bạn nên đặt -eở cuối danh sách tùy chọn:grep -rne coll *


15

không cần -r & -e!

lấy số dòng của một mẫu!

grep -n "pattern" file.txt

nếu bạn muốn chỉ lấy số dòng làm đầu ra, hãy thêm một lệnh grep khác vào nó!

grep -n "pattern" file.txt | grep -Eo '^[^:]+'

1
Để có được chỉ số dòng, nó dễ dàng hơn để sử dụng cut, ví dụ nhưcut -f1 -d:
wjandrea

1

Để grep một mẫu trong một tệp cụ thể và nhận các dòng khớp:

grep -n <Pattern> <File> | awk -F: '{ print $1 }' | sort -u

hoặc sử dụng cuttheo đề xuất của @wjandrea:

grep -n <Pattern> <File> | cut -f1 -d: | sort -u

Ở đâu

  • <Pattern>là một mẫu toàn cầu được trích dẫn (tùy chọn sử dụng -Echo biểu thức chính quy);
  • <File> là tập tin bạn quan tâm;
  • ống đầu tiên awk ...lọc các số dòng trong đầu ra của grep (trước :trên mỗi dòng);
  • ống thứ hai đảm bảo rằng số dòng chỉ xuất hiện một lần.

Để có được chỉ số dòng, nó dễ dàng hơn để sử dụng cuthơn so với AWK, ví dụ:cut -f1 -d:
wjandrea

@wjandrea Dễ hơn bằng cách nào?
Sheljohn

Ý tôi là cú pháp đơn giản hơn
wjandrea 27/07/18

@wjandrea Nghe có vẻ rất khách quan.
Sheljohn

@wjandrea Xin lỗi vì sự mỉa mai, tôi đã chỉnh sửa để bao gồm đề xuất của bạn :)
Sheljohn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.