regulares regular reemplazar quitar expresiones expresion especiales espacio ejemplos concatenar caracteres blanco alfanumerico regex powershell

regular - regex caracteres especiales c#



Reemplace el contenido de un archivo de texto con una expresión regular en powershell (2)

Tengo un archivo de texto simple y necesito un script de powershell para reemplazar algunas partes del contenido del archivo.

Mi guión actual es el siguiente:

$content = Get-Content -path "Input.json" $content -Replace ''"(/d+),(/d{1,})"'', ''$1.$2'' | Out-File "output.json"

¿Es posible escribirlo en una línea sin la variable de contenido, como esta?

Get-Content -path "Input.json" | ??? -Replace ''"(/d+),(/d{1,})"'', ''$1.$2'' | Out-File "output.json"

¿No sé cómo puedo usar la salida del primer comando de get-content en el segundo comando sin la variable $ content? ¿Hay una variable automática powershell

¿Es posible hacer más reemplazos que uno en una tubería?

Get-Content -path "Input.json" | ??? -Replace ''"(/d+),(/d{1,})"'', ''$1.$2'' | ??? -Replace ''second regex'', ''second replacement'' | Out-File "output.json"


¿Es posible escribirlo en una línea sin la variable de contenido, como esta?

Sí: use ForEach-Object (o su alias % ) y luego $_ para hacer referencia al objeto en la tubería:

Get-Content -path "Input.json" | % { $_ -Replace ''"(/d+),(/d{1,})"'', ''$1.$2'' } | Out-File "output.json"

¿Es posible hacer más reemplazos que uno en una tubería?

Sí.

  1. Como arriba: simplemente agregando más Foreach-Object .
  2. Cuando -replace devuelve el resultado, se pueden encadenar en una sola expresión:

    ($_ -replace $a,$b) -replace $c,$d

    Sospecho que los paréntesis no son necesarios, pero creo que lo hacen más fácil de leer: claramente más que unos pocos operadores encadenados (especialmente si las coincidencias / reemplazos no son triviales) no serán claros.


Sí, puede hacer eso en una sola línea y ni siquiera necesita una canalización, ya que -replace funciona en arreglos como espera que lo haga (y puede encadenar al operador):

(Get-Content Input.json) ` -replace ''"(/d+),(/d{1,})"'', ''$1.$2'' ` -replace ''second regex'', ''second replacement'' | Out-File output.json

(Se agregaron saltos de línea para facilitar la lectura).

Los paréntesis alrededor de la llamada a Get-Content son necesarios para evitar que el operador de -replace sea ​​interpretado como un argumento para Get-Content .