2011-11-12 27 views
58

Xin chào Tôi đang cố gắng tìm kiếm thư mục đường ray của mình bằng grep. Tôi đang tìm một từ cụ thể và tôi muốn grep in ra tên tệp và số dòng. Có một lá cờ grep sẽ làm điều này cho tôi? Tôi đã cố gắng để sử dụng một sự kết hợp của -n và -l nhưng đây là hoặc in ra các tên tập tin không có số hoặc chỉ bán phá giá ra rất nhiều văn bản đến các thiết bị đầu cuối mà không thể dễ dàng đọc.Tên tệp và số dòng của danh sách Grep

ví dụ:

grep -ln "search" * 

Tôi có cần phải ống nó vào một awk?

Trả lời

88

Tôi nghĩ -l quá hạn chế vì nó ngăn đầu ra của -n. Tôi sẽ đề xuất -H (--with-filename): In tên tệp cho mỗi kết quả phù hợp.

grep -Hn "search" * 

Nếu có quá nhiều đầu ra, hãy thử -o để chỉ in phần khớp.

grep -nHo "search" * 
21

grep -rin searchstring * | cut -d":" -f1-2

này sẽ nói, tìm kiếm đệ quy (đối với chuỗi 'searchstring' trong ví dụ này), ignore case, và số dòng hiển thị. Kết quả từ grep sẽ giống như thế:

/path/to/result/file.name:100: Line in file where 'searchstring' is found.

ống chúng tôi Tiếp theo đó dẫn đến lệnh cắt sử dụng dấu hai chấm ":" như delimiter lĩnh vực của chúng tôi và các lĩnh vực hiển thị từ 1 đến 2.

Khi tôi không cần số dòng tôi thường sử dụng -f1 (chỉ tên tệp và đường dẫn). Sau đó ống nó để uniq vì vậy mà tôi chỉ thấy mỗi tên tập tin một lần như thế này:

grep -ir searchstring * | cut -d":" -f1 | uniq

+0

Tôi cảm thấy câu trả lời hay nhất là câu hỏi gốc. Chỉ tên tệp và số dòng. – mastaBlasta

+1

Lưu ý rằng điều này không hoạt động nếu bạn có tên đường dẫn tuyệt đối của Windows như 'C: \ Users \ me \ git \' vì nó đã chứa một dấu hai chấm. – hirse

4

Tôi thích sử dụng:

grep -niro 'searchstring' <path>

Nhưng đó chỉ là vì tôi luôn quên những cách khác và tôi không thể quên Robert de grep - niro vì một số lý do :)

+2

Chỉ cần thực hiện cho tiếng Pháp một '-noir' hoạt động quá;) –

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