Tôi muốn tìm kiếm một chuỗi văn bản trong tất cả các tệp trong một thư mục (và không phải thư mục con của nó; tôi biết -r
tùy chọn thực hiện điều đó, nhưng đó không phải là điều tôi muốn).
Đang chạy
grep "string" /path/to/dir
được cho là có thể làm điều này, tôi đã đọc, nhưng nó cho tôi lỗi:
grep: dir: Là một thư mục
Tiếp theo, tôi đã thử chạy
grep
trên nhiều tập tin.grep "string" .bashrc .bash_aliases
hoạt động hoàn hảo.grep "string" .bash*
hoạt động như dự định quá.grep "string" *
cho tôi các lỗi:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
Chỉ các lỗi được in, tôi không nhận được các dòng phù hợp. Tôi đã thử sử dụng-s
tùy chọn, nhưng không có kết quả.
Vì vậy, câu hỏi của tôi:
Tại sao tôi không thể sử dụng
grep
trên một thư mục, như trong (1), khi tôi có thể? Tôi đã thấy điều đó được thực hiện trong nhiều ví dụ trên Internet.
Chỉnh sửa : Khi tôi nói "sử dụng grep trên một thư mục", tôi có nghĩa là "tìm kiếm trong tất cả các tệp trong thư mục đó ngoại trừ các thư mục con của nó". Tôi tin rằng đây là những gì grep làm khi bạn chuyển một thư mục đến nó thay cho một tệp. Tôi có sai không?Xin vui lòng cho tôi một lời giải thích về hoạt động của
grep
nó sẽ giải thích hành vi của các lệnh trong (2).
Chỉnh sửa : Hãy để tôi được cụ thể hơn. Tại sao sử dụng ký tự đại diện để chỉ định nhiều tệp để tìm kiếm để làm việc cùng.bash*
và không có*
hoặc thậm chí./*
?Làm cách nào tôi có thể tìm kiếm tất cả các tệp trong một thư mục (chứ không phải thư mục con của nó) bằng cách sử dụng
grep
?
grep "string" .bash*
.
grep "string" * .* 2>/dev/null
hoặcgrep -s "string" * .*
*
, được gọi là Globing. Globbing không bao gồm tên tệp bắt đầu bằng một dấu chấm.bashrc
như tiêu chuẩn. Bạn có thể đặt các tùy chọn shell để nó sẽ bao gồm các tệp này, nhưng bạn có thể gặp rắc rối nếu bạn không biết mình đang làm gì. Một hướng dẫn tốt để hiểu sự hả hê có thể được tìm thấy ở đây mywiki.wooledge.org/glob