Tôi đang sử dụng Perl để tìm kiếm và thay thế nhiều biểu thức thông thường: Khi tôi thực hiện lệnh sau, tôi nhận được một lỗi:Perl tìm kiếm dòng lệnh và thay thế bằng nhiều biểu
prompt> find "*.cpp" | xargs perl -i -pe 's/##(\W)/\1/g' -pe 's/(\W)##/\1/g'
syntax error at -e line 2, near "s/(\W)##/\1/g"
Execution of -e aborted due to compilation errors.
xargs: perl: exited with status 255; aborting
Có nhiều -e
là hợp lệ trong Perl, vậy tại sao điều này không hoạt động? Có một giải pháp cho điều này?
Bạn có thể thay thế hai regex đó bằng một thay đổi: 's/## (? = \ W) | (? <= \ W) ## // g' – TLP
@TLP Tôi là một noob đối với Perl; xin vui lòng bạn có thể giải thích những gì hiện? = và? <= có nghĩa là bối cảnh này? –
Chúng là các xác nhận xung quanh, bạn có thể đọc thêm về chúng trong [perldoc perlre] (http://perldoc.perl.org/perlre.html#Look-Around-Assertions). Chúng có chiều rộng bằng 0, vì vậy chúng chỉ kiểm tra và không loại bỏ. – TLP