¿Cómo se puede buscar y reemplazar texto en un archivo usando el entorno de línea de comandos de Windows?

Resuelto Ray asked hace 16 años • 30 respuestas

Estoy escribiendo un script de archivo por lotes usando el entorno de línea de comandos de Windows y quiero cambiar cada aparición de algún texto en un archivo (por ejemplo, "FOO") por otro (por ejemplo, "BAR"). ¿Cuál es la forma más sencilla de hacerlo? ¿Alguna función integrada?

Ray avatar Sep 13 '08 04:09 Ray
Aceptado

Muchas de las respuestas aquí me ayudaron a orientarme en la dirección correcta, sin embargo, ninguna era adecuada para mí, así que publico mi solución.

Tengo Windows 7, que viene con PowerShell integrado. Aquí está el script que utilicé para buscar/reemplazar todas las instancias de texto en un archivo:

powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt"

Para explicarlo:

  • powershellinicia powershell.exe, que está incluido en Windows 7
  • -Command "... "es un argumento de línea de comando para powershell.exe que contiene el comando para ejecutar
  • (gc myFile.txt)lee el contenido de myFile.txt( gces la abreviatura del Get-Contentcomando)
  • -replace 'foo', 'bar'simplemente ejecuta el comando reemplazar para reemplazar fooconbar
  • | Out-File myFile.txtcanaliza la salida al archivomyFile.txt
  • -encoding ASCIIevita la transcripción del archivo de salida a Unicode, como señalan los comentarios

Powershell.exe ya debería ser parte de su declaración PATH, pero si no, puede agregarlo. La ubicación en mi máquina esC:\WINDOWS\system32\WindowsPowerShell\v1.0

Actualización
Aparentemente, los sistemas Windows modernos tienen PowerShell integrado, lo que le permite acceder directamente usando

(Get-Content myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt
Rachel avatar Jan 08 '2014 15:01 Rachel

Si tiene una versión de Windows que admite .Net 2.0, reemplazaría su shell. PowerShell le brinda todo el poder de .Net desde la línea de comandos. También hay muchos comandos integrados. El siguiente ejemplo resolverá su pregunta. Estoy usando los nombres completos de los comandos, hay alias más cortos, pero esto le da algo a Google.

(Get-Content test.txt) | ForEach-Object { $_ -replace "foo", "bar" } | Set-Content test2.txt
Mike Schall avatar Sep 12 '2008 22:09 Mike Schall

Acabo de usar FART (utilidad de línea de comando " Buscar y reemplazar texto " ) : excelente pequeño software gratuito para reemplazar texto dentro de un gran conjunto de archivos.

Los archivos de instalación están en SourceForge .

Ejemplo de uso:

fart.exe -p -r -c -- C:\tools\perl-5.8.9\* @@APP_DIR@@ C:\tools

Previsualizará los reemplazos a realizar de forma recursiva en los archivos de esta distribución de Perl.

El único problema: el icono del sitio web de FART no es precisamente de buen gusto, refinado o elegante;)


Actualización de 2017 (7 años después), señala jagb en los comentarios al artículo de 2011 " FARTing the Easy Way – Find And Replace Text " de Mikail Tunç


Como señaló Joe Jobs en los comentarios (diciembre de 2020), si desea reemplazar, &Apor ejemplo, deberá usar comillas para asegurarse de que &el shell no lo interprete:

fart in.txt "&A" "B" 
VonC avatar Mar 02 '2010 12:03 VonC