2010-03-31 40 views
7

Tôi muốn tìm kiếm đệ quy thông qua thư mục tệp văn bản và thay thế mọi lần xuất hiện của foo trong các tệp với bar. Cách dễ nhất để thực hiện việc này là gì?Cách dễ nhất để tìm và thay thế đệ quy?

Tôi tưởng tượng rằng grep sẽ thực hiện công việc trong một dòng, nhưng dường như tôi không thể tìm thấy ví dụ về điều này.

Tôi đang làm việc trong OS X.

+0

Bạn có nói về ** foo ** trong tên file hoặc foo trong các tập tin bản thân? – Robusto

+0

Rất tiếc, đã được làm rõ. Trong các tập tin xin vui lòng. –

+0

Thuộc về superuser.com –

Trả lời

10

GNU tìm

find /path -type f -iname "*.txt" -exec sed -i.bak 's/foo/bar/g' "{}" +; 
3

grep chỉ được sử dụng để tìm sự vật, không để thay đổi chúng.

Để sửa đổi với giao diện giống như grep, bạn thường sử dụng sed. Tuy nhiên, sed không hỗ trợ bất kỳ loại đệ quy nào - nó chỉ hoạt động trên một tệp tại một thời điểm. Để thêm điều đó, bạn thường sử dụng find để tìm tệp chứa mẫu mong muốn, sau đó yêu cầu gọi sed để sửa đổi tệp.

0

Có một trình soạn thảo văn bản miễn phí tuyệt vời sẽ làm điều này một cách đơn giản và dễ dàng: TextWrangler.

+0

Tuyệt. Làm thế nào để cài đặt nó trên máy chủ của tôi? –

+0

Giả sử đó là máy chủ OS X, sau đó chỉ cần tải xuống và cài đặt theo cách thông thường. Nếu nó không đầu thì dùng VNC hoặc Remote Desktop. Tất nhiên bạn thậm chí có thể không cần phải cài đặt nó trên máy chủ - nếu bạn đang sử dụng máy OS X cục bộ và gắn hệ thống tập tin từ máy chủ của bạn thì bạn có thể cài đặt TextWrangler cục bộ và thực hiện tìm kiếm và thay thế từ máy cục bộ của bạn mạng. –

2

zsh

sed -i 's/foo/bar/g' **/*.txt 
+0

Tôi nhận được 'sed: 1:" **/*. Txt ": mã lệnh không hợp lệ *'. –

+0

Bạn đang làm sai. Và/hoặc không có trong zsh. – wRAR

+0

làm thế nào để scape '/' nếu foo và bar là đường dẫn? – rraallvv

Các vấn đề liên quan