varios usos una txt texto recorrer patrones para palabras palabra nombre microsoft manejo exacto exacta ejemplos dentro crear cortar comandos comando carpeta cadenas buscar archivos archivo string search text powershell recursion

string - usos - split powershell ejemplos



¿Cómo buscar una cadena en varios archivos y devolver los nombres de los archivos en Powershell? (9)

Aquí hay una variedad de respuestas precisas, pero aquí está el código más conciso para varias variaciones diferentes. Para cada variación, la línea superior muestra la sintaxis completa y la parte inferior muestra la sintaxis concisa.

El elemento (2) es una forma más concisa de las respuestas de Jon Z y manojlds, mientras que el elemento (1) es equivalente a las respuestas de vikas368 y buygrush.

  1. Lista de objetos de FileInfo para todos los archivos que contienen patrón:

    Get-ChildItem -Recurse filespec | Where-Object { Select-String pattern $_ -Quiet } ls -r filespec | ? { sls pattern $_ -q }

  2. Lista de nombres de archivos para todos los archivos que contienen patrón:

    Get-ChildItem -Recurse filespec | Select-String pattern | Select-Object -Unique Path ls -r filespec | sls pattern | select -u Path

  3. Lista de objetos de FileInfo para todos los archivos que no contienen patrón:

    Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) } ls -r filespec | ? { !(sls pattern $_ -q) }

  4. Lista de nombres de archivos para todos los archivos que no contienen patrón:

    (Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }).FullName (ls -r filespec | ? { !(sls pattern $_ -q) }).FullName

Empecé a aprender PowerShell hace un par de días, y no pude encontrar nada en Google que haga lo que necesito, así que por favor responda con mi pregunta.

Me han pedido que reemplace algunas cadenas de texto en varios archivos. No necesariamente conozco la extensión de los posibles archivos de destino y tampoco conozco su ubicación. Hasta ahora he logrado navegar recursivamente en el directorio ( get-ChildItem -recurse ) y encontrar la cadena que estaba buscando con get-content y select-string:

Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"

El problema es que puedo ver las apariciones del texto que estoy buscando, pero no sé cómo decirle a PS que también devuelva la ruta y el nombre de todos los archivos coincidentes.

¿Cómo puedo obtener el nombre y la ubicación de los archivos que contienen la expresión que estoy buscando?


Así es como lo haría, no necesitas obtener contenido:

ls -r | Select-String dummy | select line,path

o

ls -r | Select-String dummy | fl *

Para ver cuáles son las diferentes propiedades ...


Canaliza el contenido de tu

Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"

a fl *

Verá que la ruta ya se está devolviendo como una propiedad de los objetos.

Si desea solo la ruta, use la select path select -unique path o la select -unique path para eliminar duplicados:

Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy" | select -unique path


Esto debería dar la ubicación de los archivos que contienen su patrón:

Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name


Esto mostrará la ruta, el nombre del archivo y la línea de contenido que encontró que coincidía con el patrón.

Get-ChildItem -Path d:/applications/*config -recurse | Select-String -Pattern "dummy"


Esto mostrará una lista de la ruta completa a cada archivo que contiene la cadena de búsqueda:

foreach ($file in Get-ChildItem | Select-String -pattern "dummy" | Select-Object -Unique path) {$file.path}

Tenga en cuenta que no muestra un encabezado sobre los resultados y no muestra las líneas de texto que contienen la cadena de búsqueda. Todo lo que le dice es dónde puede encontrar los archivos que contienen la cadena.


Para mantener los detalles completos del archivo en la matriz resultante, puede usar una ligera modificación de la respuesta publicada por vikas368 (que no parece funcionar bien con el autocompletado de ISE):

Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }

o en pocas palabras:

ls -r | ?{ $_ | Select-String -Pattern "dummy" }


Si busca en un directorio, puede hacerlo:

select-string -Path "c:/temp/*.*" -Pattern "result" -List | select Path


Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}

Esto le dará los detalles completos de todos los archivos