Sử dụng sedvới findthay vìgrep
Trước hết, tôi sẽ sử dụng findchứ không phải grep, và điều này vì ba lý do tốt:
findcho phép lựa chọn tập tin chính xác hơn. Ví dụ, grep -r string *.txtsẽ chỉ mang lại các tệp trong thư mục hiện tại; không phải trong thư mục con.
findđi kèm với -exectùy chọn mạnh mẽ giúp loại bỏ sự cần thiết cho toàn bộ --null … |xargs 0cấu trúc.
- Các tùy chọn
-readablevà sẽ ngăn chặn lãng phí thời gian vào các tệp không thể truy cập.-writablefind
Kiểm tra chụp
Điều đó nói rằng, grepchính nó cho vay thử nghiệm đầu tiên để xem những gì sẽ được nắm bắt:
$ find . -exec grep term1 {} \;
hoặc cụ thể hơn:
$ find . -type f -name '*.txt' -readable -writable -exec grep term1 {} \;
Chạy khô
Bây giờ, tiến hành sedchạy khô. Các sedtùy chọn -nlà một từ đồng nghĩa với --quietvà pvào cuối của sedbiểu sẽ in không gian mô hình hiện tại.
$ find . -exec sed -n 's/term1/term2/gp' {} \;
hoặc cụ thể hơn:
$ find . -type f -name '*.txt' -readable -writable -exec sed -n 's/term1/term2/gp' {} \;
Chấp hành
Nếu mọi thứ đều ổn, hãy đưa ra lệnh dứt khoát bằng cách thay thế sedtùy chọn -nbằng cách -i"tại chỗ" và bằng cách loại bỏ pở cuối.
$ find . -exec sed -i 's/term1/term2/g' {} \;
hoặc cụ thể hơn:
$ find . -type f -name '*.txt' -readable -writable -exec sed -i 's/term1/term2/g' {} \;
Thêm findví dụ
Nhiều findví dụ có thể được tìm thấy ở đây .