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í.
- Como arriba: simplemente agregando más
Foreach-Object
. 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
.