2012-09-28 13 views
6

Tôi có lệnh này dòng đầu vào trong Windows:Làm cách nào để thoát khỏi thanh dọc khi thực hiện dòng lệnh với Ruby?

dir /b | ruby -ne 'f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};' 

Dòng này là để tìm tất cả các file trong thư mục hiện tại với helloworld trong đó. (Tôi hiểu có rất nhiều cách khác để làm điều này nhưng bài không tập trung vào đó)

Câu hỏi của tôi là:

Dòng này mang lại cho lỗi nói line is not a valid command. Sau đó, tôi nhận ra | trong Ruby như một cú đúp cho biến khối là một dấu hiệu đường ống trong cmd. Tôi đã cố gắng để thay đổi toàn bộ dòng vào gấp đôi trích dẫn và thoát khỏi | ký nhưng không thành công. Làm thế nào tôi có thể thoát khỏi thanh dọc |

Vui lòng không trả lời các cách khác để thực hiện tác vụ như sử dụng các công cụ khác như grep, find, sed hoặc awk hoặc thay đổi chặn thành vòng lặp.

Trả lời

9

tôi thấy this microsoft.com page rằng nói như sau về đường ống và ký tự đặc biệt:

Các dấu và (&), ống (|), và dấu ngoặc() là đặc biệt nhân vật đó phải được đi trước bởi sự thoát ký tự dấu ngoặc đơn (^) hoặc khi bạn chuyển chúng làm đối số.

2

Dấu nháy đơn có vẻ là vấn đề của bạn. Thay vào đó, hãy sử dụng dấu ngoặc kép, vì chúng được yêu cầu cho Windows (mặc dù Unix cũng có thể hiểu được).

này làm việc cho tôi trong Windows:

C:\tmp\ruby>echo helloworld > foo.txt 

C:\tmp\ruby>dir /b | ruby -ne "f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};" 
foo.txt 

Tôi biết bạn nói rằng bạn đã cố gắng dấu ngoặc kép, nhưng nếu bạn dán những gì bạn thực sự cố gắng, tôi có thể thấy nếu cái gì khác là sai.

+0

Nó thực sự hoạt động! Tôi đã thử, nhưng chỉ thử với | thoát bởi \ nhưng không thử nó mà không thoát khỏi bất cứ điều gì, và điều này hóa ra là đáng ngạc nhiên tốt. – texasbruce

+0

@texasbruce Rất vui khi được nghe. Đó là một trong những thực tế của lập trình - bạn cũng phải hiểu rất nhiều hoạt động của hệ điều hành. Nếu câu trả lời của tôi giải quyết được vấn đề của bạn, hãy xem xét chấp nhận. – Kelvin