2012-09-28 9 views
6

मैं Windows में इस कमांड लाइन इनपुट:रूबी के साथ कमांड लाइन करते समय मैं वर्टिकल बार से कैसे बच सकता हूं?

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

यह पंक्ति उस में helloworld के साथ वर्तमान निर्देशिका के अंतर्गत सभी फ़ाइलों को मिल रहा है। (मैं समझता हूँ वहाँ यह करने के लिए कई अन्य तरीके हैं लेकिन पोस्ट कि पर ध्यान केंद्रित नहीं है)

मेरा प्रश्न है:

इस लाइन त्रुटि line is not a valid command कह देता है। तब मुझे रूबी में | एहसास हुआ कि ब्लॉक वैरिएबल के लिए एक ब्रेस के रूप में cmd ​​में एक पाइप साइन है। मैंने पूरी लाइन को डबल उद्धृत में बदलने की कोशिश की और | साइन लेकिन कोई सफलता नहीं। मैं ऊर्ध्वाधर बार से कैसे बच सकता हूं?

कृपया कार्य करने के अन्य तरीकों का उत्तर न दें जैसे कि grep, find, sed या awk जैसे अन्य टूल का उपयोग करना, या ब्लॉक को लूप में बदलना।

उत्तर

9

मैं this microsoft.com page कि पाइप और विशेष वर्ण के बारे में निम्नलिखित कहते हैं पाया:

एम्परसैंड (&), पाइप (|), और कोष्ठक() विशेष अक्षर हैं जो भागने से पहले आना चाहिए रहे हैं चरित्र (^) या उद्धरण चिह्न जब आप उन्हें तर्क के रूप में पास करते हैं।

2

एकल उद्धरण आपकी समस्या प्रतीत होता है। इसके बजाय डबल कोट्स का उपयोग करें, क्योंकि वे विंडोज के लिए आवश्यक हैं (हालांकि यूनिक्स या तो समझ सकता है)।

यह विंडोज में मेरे लिए काम करता है:

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 

मैं आप का उल्लेख किया है कि आप दोहरे उद्धरण चिह्नों की कोशिश की है, लेकिन अगर आप पेस्ट क्या आप वास्तव में करने की कोशिश की, मैं देख सकता है, तो कुछ और ही गलत था।

+0

यह वास्तव में काम करता है! मैंने कोशिश की, लेकिन केवल कोशिश की | \ N से बच निकले लेकिन कुछ भी बचने के बिना कोशिश नहीं की, और यह आश्चर्यजनक रूप से अच्छा साबित हुआ। – texasbruce

+0

@texasbruce इसे सुनकर खुशी हुई। यह प्रोग्रामिंग की वास्तविकताओं में से एक है - आपको ओएस के कामकाज का एक अच्छा सौदा भी समझना होगा। अगर मेरे जवाब ने आपकी समस्या हल की है, तो कृपया स्वीकार करने पर विचार करें। – Kelvin

संबंधित मुद्दे

 संबंधित मुद्दे