Trường hợp nào grep -r tìm kiếm theo mặc định?


16

Tôi tìm thấy nếu tôi tìm kiếm bằng grep mà không chỉ định đường dẫn, giống như grep -r 'mytext'mất nhiều thời gian. Trong khi đó, nếu tôi tìm kiếm với đường dẫn được chỉ định, grep -r 'mytext' .nó sẽ ngay lập tức tìm thấy thứ tôi cần. Vì vậy, tôi tò mò, ở dạng đầu tiên, trong thư mục nào grep tìm kiếm?

UDATE: phiên bản grep: grep (GNU grep) 2.10


3
Hãy thử gõ đi, viết foomytextbar(theo sau là Enter) sau khi chạy grep -r 'mytext'.
sr_

2
Có lẽ bạn nên xác định vua của grepđó là gì. Với GNU greptôi sử dụng trên Linux grep -r 'mytext'grep -r 'mytext' .thực hiện điều tương tự: tìm kiếm đệ quy bắt đầu từ thư mục hiện tại. Khi -rchuyển đổi được sử dụng GNU grep không tìm kiếm STDIN.
manatwork

2
Ah. Tôi đã thử nghiệm với grep2.12: pastebin.com/L4my26QS Trong khi đó, tôi đã tìm thấy điều này trong tệp TIN về phiên bản 2.11 (2012/03/02): "Nếu không có toán hạng tệp nào được đưa ra và tùy chọn tương đương dòng lệnh -r hoặc tương đương được đưa ra , grep bây giờ tìm kiếm thư mục làm việc. Trước đây grep đã bỏ qua -r và tìm kiếm đầu vào tiêu chuẩn không đáng kể. Một -r được tìm thấy trong GREP_OPTIONS không có hiệu ứng mới này. "
manatwork

3
GNU grep gần đây đã thay đổi hành vi với đối số -r (xem cam kết ). Vì vậy, "grep -r THỰC HIỆN" với grep mới hơn sẽ tìm kiếm thư mục hiện tại chứ không phải STDIN.
hluk

2
@Mikel, tôi đã cập nhật câu hỏi của mình với phiên bản grep. Có vẻ như câu trả lời mà tôi chỉ ra là chính xác thực sự là chính xác, bởi vì tôi đang sử dụng một grep 'cũ'. Vì vậy, tôi không chỉ định -r hay không, nếu không có thư mục nào được cung cấp, nó sẽ tìm kiếm trong STDIN. Btw, cảm ơn vì cuộc điều tra đó, bây giờ, tôi sẽ biết về những thay đổi trong tương lai của grep;)

Câu trả lời:


24

Trên thực tế, nó không tìm kiếm ở bất cứ đâu. Nó chờ đầu vào từ đầu vào tiêu chuẩn.

Thử đi:

beast:~ viroos$ grep foo

Khi bạn nhập dòng chứa "foo" và nhấn enter, dòng này sẽ được lặp lại nếu không con trỏ sẽ được chuyển sang dòng mới nhưng grep sẽ không in bất cứ thứ gì.


6
Như tôi đã nhận xét ở trên grep -r PATTERNvới phiên bản GNU grep mới hơn sẽ không đọc đầu vào tiêu chuẩn mà tìm kiếm mẫu trong thư mục hiện tại (xem cam kết ). Thay đổi này có ý nghĩa vì có lẽ bạn không muốn tìm kiếm đầu vào tiêu chuẩn khi bạn chỉ định -rcờ.
hluk

Tôi đã kiểm tra phiên bản grep của mình, đó là 2.10, vì vậy câu trả lời này hoàn toàn phù hợp. Btw, bây giờ, tôi sẽ biết những gì phải chờ đợi từ các phiên bản mới hơn của grep.

3

Chính xác như câu trả lời trước của Maciek nói:

Trên thực tế, nó không tìm kiếm ở bất cứ đâu. Nó chờ đầu vào từ đầu vào tiêu chuẩn.

Tuy nhiên, bạn có thể ghi vào stdin của một chương trình đã chạy nếu bạn có sẵn / Proc bằng cách chuyển dữ liệu vào mô tả đầu tiên thứ 0 của nó:

Trong một thiết bị đầu cuối chạy

grep "hello"

và thấy nó chờ đợi vô thời hạn ... Trong một loại thiết bị đầu cuối khác:

echo "hello $USER" > /proc/`pgrep grep`/fd/0

xem thiết bị đầu cuối in xin chào và tên người dùng của bạn.

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.