2010-03-26 41 views
24

tôi có một tệp js được đổi tên mà tôi phải gọi trong mỗi trang php của mình. Bây giờ tôi muốn thay thế tên cũ bằng tên cũ bằng cách sử dụng shell. gì iam sử dụng là: -thay thế một văn bản cụ thể trong tất cả các tệp bằng cách sử dụng lệnh dòng đơn

sed -i ’s/old/new/g’ * 

nhưng điều này là đưa ra các lỗi sau: -

sed: -e expression #1, char 1: unknown command: 

giờ làm thế nào tôi có thể làm thay thế này ??

Trả lời

24

Có lẽ giải pháp ít tiết, nhưng ở đây chúng tôi đi:

for i in *; do sed -i 's/old/new/g' "$i"; done 

Tâm trí bạn, nó sẽ chỉ làm việc trên các cấp độ hiện tại của hệ thống tập tin, tập tin trong thư mục con sẽ không được sửa đổi. Ngoài ra, bạn có thể muốn thay thế * bằng * .php hoặc tạo bản sao lưu (chuyển đối số sau -i và nó sẽ tạo bản sao lưu với phần mở rộng đã cho).

+0

hmm. trên OSX nhận lệnh 'tôi mong đợi \ theo sau là văn bản' – jamescampbell

-2

Hãy thử điều này:

ls | grep "php" > files.txt 
for file in $(cat files.txt); do 
    sed 's/catch/send/g' $file > TMPfile.php && mv TMPfile.php $file 
done 
+2

ls/grep/cat là vô ích. 'cho tập tin trong * .php; do ....; done' – ghostdog74

+1

Không biết về vô dụng - nhưng nó là một cách tiếp cận rất xấu xí, sau đó có thực tế là sử dụng tên tệp tạm thời cố định (files.txt, TMPfile.php) sẽ phá vỡ nếu có bất kỳ sự tương tranh nào. – symcbean

3
perl -pi -e 's/old/new/g' *.php 
+0

gặp lỗi trên danh sách đối số OSX 'zsh: quá dài: perl' – jamescampbell

+0

Chỉ cần thử nghiệm trên OSX zsh và hoạt động đối với tôi. – radio4fan

40
sed -i.bak 's/old/new/g' *.php 

để làm điều đó một cách đệ quy

find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +; 
+0

Điều này cho lỗi "TÌM: Công tắc không hợp lệ" –

8

Bạn đang sử dụng Unicode dấu nháy (QUYỀN SINGLE BÁO GIÁ MARK - U2019) thay vì ASCII (0x27) dấu nháy đơn xung quanh đối số lệnh sed của bạn.

0

này rất đơn giản, không cho hoặc lặp lại, một nâng niu mang của bất kỳ số điện thoại hoặc thư mục lồng nhau

grep -rl oldText [folderName-optional] | xargs sed -i s/oldText/newText/g

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