2011-10-30 40 views
8

Có thể một số người giúp tôi chạy lệnh dưới đây. Tôi cũng đã cố gắng thoát khỏi dấu nháy đơn nhưng không may mắn.Perl regex trích dẫn đơn

perl -pi.bak -e 's/Object\.prototype\.myString='q'//' myfile.html 
+0

\ Q ... \ E cũng không hoạt động – user1018279

Trả lời

6

dấu ngoặc kép nên làm việc:

perl -pi.bak -e "s/Object\.prototype\.myString='q'//" myfile.html 

Bạn có thể hoặc không muốn có một sửa đổi lần g trên regex đó. Và có thể bạn sẽ muốn thực hiện một số diff sau để đảm bảo rằng bạn không mang theo HTML.

+0

Đây là những gì làm việc cho tôi. Tôi muốn xóa trích dẫn và một số ký tự khác (dấu cách, dấu ngoặc đơn, -,.) Từ biến 'tên': prxchange ("s/| - | \. | \ (| \) | \ '//", - 1, tên) –

14

Vấn đề không phải với Perl, nhưng với vỏ của bạn. Để xem những gì đang xảy ra, hãy thử này:

$ echo 's/Object\.prototype\.myString='q'//' 
s/Object\.prototype\.myString=q// 

để làm cho nó làm việc, bạn có thể thay thế mỗi quote duy nhất với '\'', như thế này:

$ echo 's/Object\.prototype\.myString='\''q'\''//' 
s/Object\.prototype\.myString='q'// 

hoặc bạn có thể tiết kiệm một vài ký tự bằng cách viết chỉ:

$ echo 's/Object\.prototype\.myString='\'q\''//' 
s/Object\.prototype\.myString='q'// 

hoặc thậm chí chỉ:

$ echo 's/Object\.prototype\.myString='\'q\'// 
s/Object\.prototype\.myString='q'// 

hoặc thậm chí:

$ echo s/Object\\.prototype\\.myString=\'q\'// 
s/Object\.prototype\.myString='q'// 

dấu ngoặc kép, như suggested by mu is too short, sẽ làm việc ở đây cũng vậy, nhưng có thể gây ra những bất ngờ không mong muốn trong những tình huống khác, vì nhiều ký tự thường thấy trong mã Perl, như $, !\, có ý nghĩa đặc biệt đối với vỏ ngay cả bên trong dấu ngoặc kép.

Tất nhiên, một giải pháp thay thế là để thay thế các dấu nháy đơn trong regexp của bạn với bát phân hoặc hex mã \047 hoặc \x27 thay vì:

$ perl -pi.bak -e 's/Object\.prototype\.myString=\x27q\x27//' myfile.html 
+0

Trong trường hợp của tôi, đề xuất cho '\ x27' có vẻ đơn giản và đáng tin cậy nhất - đã làm việc tuyệt vời! – zeroasterisk

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