2012-09-28 9 views
6

Ho questo ingresso di linea di comando in Windows:Come posso sfuggire alla barra verticale quando eseguo la riga di comando con Ruby?

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

Questa linea è quello di trovare tutti i file nella directory corrente con helloworld in esso. (Capisco che ci sono molti altri modi per fare questo, ma il post non si sta concentrando su quello)

La mia domanda è:

Questa linea dà errore dicendo line is not a valid command. Poi ho realizzato | in Ruby come una parentesi graffa per la variabile di blocco è un segno di pipe in cmd. Ho provato a cambiare l'intera linea in doppia citazione e sfuggire al | firmare ma non ha successo. Come posso sfuggire alla barra verticale |?

Si prega di non rispondere ad altri modi per eseguire l'attività, ad esempio utilizzando altri strumenti come grep, find, sed o awk o cambiare il blocco in ciclo for.

risposta

9

ho trovato this microsoft.com page che dice quanto segue riguardo tubazioni e caratteri speciali:

La e commerciale (&), pipe (|) e le parentesi() sono speciali caratteri che devono essere preceduti dalla fuga carattere (^) o virgolette quando li si passa come argomenti.

2

Le virgolette singole sembrano essere il tuo problema. Usa invece le virgolette doppie, perché sono richieste per Windows (anche se Unix può capirlo).

Questo funziona per me in 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 

So che lei ha detto che si è tentato virgolette doppie, ma se si incolla quello che effettivamente provato, posso vedere se qualcosa non andava.

+0

Funziona davvero! Ho provato, ma ho provato solo con | scappato da \ ma non l'ho provato senza sfuggire a nulla, e questo si è rivelato sorprendentemente buono. – texasbruce

+0

@texasbruce Felice di sentirlo. Questa è una delle realtà della programmazione: devi anche capire una buona parte del funzionamento del sistema operativo. Se la mia risposta ha risolto il tuo problema, ti preghiamo di prendere in considerazione l'accettazione. – Kelvin

Problemi correlati