Sử dụng sed
với find
thay vìgrep
Trước hết, tôi sẽ sử dụng find
chứ không phải grep
, và điều này vì ba lý do tốt:
find
cho phép lựa chọn tập tin chính xác hơn. Ví dụ, grep -r string *.txt
sẽ 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 -exec
tùy chọn mạnh mẽ giúp loại bỏ sự cần thiết cho toàn bộ --null … |xargs 0
cấu trúc.
- Các tùy chọn
-readable
và sẽ ngăn chặn lãng phí thời gian vào các tệp không thể truy cập.-writable
find
Kiểm tra chụp
Điều đó nói rằng, grep
chí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 sed
chạy khô. Các sed
tùy chọn -n
là một từ đồng nghĩa với --quiet
và p
vào cuối của sed
biể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ế sed
tùy chọn -n
bằ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 find
ví dụ
Nhiều find
ví dụ có thể được tìm thấy ở đây .