Ý của bạn là tìm kiếm và thay thế một chuỗi trong tất cả các tệp được đối sánh bởi grep?
perl -p -i -e 's/oldstring/newstring/g' `grep -ril searchpattern *`
Biên tập
Vì đây có vẻ là một câu hỏi khá phổ biến nên tôi nên cập nhật.
Ngày nay tôi chủ yếu sử dụng ack-grep
vì nó thân thiện với người dùng hơn. Vì vậy, lệnh trên sẽ là:
perl -p -i -e 's/old/new/g' `ack -l searchpattern`
Để xử lý khoảng trắng trong tên tệp, bạn có thể chạy:
ack --print0 -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'
bạn có thể làm nhiều hơn với ack-grep
. Giả sử bạn muốn giới hạn tìm kiếm chỉ trong các tệp HTML:
ack --print0 --html -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'
Và nếu khoảng trắng không phải là vấn đề, nó thậm chí còn ngắn hơn:
perl -p -i -e 's/old/new/g' `ack -l --html searchpattern`
perl -p -i -e 's/old/new/g' `ack -f --html`
Can't open Untitled: No such file or directory, <> line 5
khi thử "Thư mục không có tiêu đề / file.txt".