cmd - ¿Cómo puedo evitar una comilla doble con GNU grep para windows/dos?
grep en dos (1)
Debes preocuparte por las comillas de escape tanto para grep como para cmd.exe
grep espera que las comillas se escapen como /"
cmd.exe escapa de las comillas como ^"
. La cita es una máquina de estado, lo que significa que las comillas no guardadas activan y desactivan la semántica de cotizaciones. Cuando las citas están activadas, los caracteres especiales como <
, |
, &
, etc. se tratan como literales. activa la semántica de cotización. La siguiente cita desactiva la semántica de cotización. Solo es posible eludir una cotización cuando la cotización está DESACTIVADA. Las cotizaciones no equilibradas dan como resultado el resto. Por lo tanto, en su caso, el >>tmp.txt
no se trata como redirección por cmd.exe, por lo que pasa a grep como argumento.
Cualquiera de los siguientes funcionará:
grep -r "Assembly=/"Foobar^" . >>tmp.txt
grep -r ^"Assembly=/"Foobar" . >>tmp.txt
grep -r ^"Assembly=/^"Foobar^" . >>tmp.txt
grep -r Assembly=/^"Foobar . >>tmp.txt
Si su término de búsqueda incluye espacios, entonces grep necesita las citas adjuntas, por lo que necesitaría cualquiera de los primeros tres formularios. El último formulario no funcionaría con espacios en el término de búsqueda.
Estoy tratando de buscar
Asamblea = "Foobar
en todos los archivos y dirigir la salida a tmp.txt
Lo he intentado (cmd / error)
grep -r "Assembly = /" Foobar ". >> error tmp.txt (argumento no válido)
grep -r "Assembly =" "Foobar". >> tmp.txt
error (no suficiente espacio)grep -r ''Assembly = "Foobar''. >> tmp.txt
error (no suficiente espacio)
Muy frustrante. ¿Alguna sugerencia?