es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

powershell reemplazar salto de línea no funciona: `n

Tengo un archivo gpx, que es simplemente un archivo xml, y quiero ejecutar un script de powershell para eliminar el nodo

xml
<trkpt lat="-33.483478" lon="150.159805">
<name> p2 </name>
<time>2021-02-23T00:00:12Z</time>
</trkpt>
<trkpt lat="-33.483852" lon="150.158309">
<name> p3 </name>
<time>2021-02-23T00:00:56Z</time>
</trkpt>
<trkpt lat="-33.483943" lon="150.157897">
<name> p4 </name>
<time>2021-02-23T00:01:07Z</time>
</trkpt>
<trkpt lat="-33.484066" lon="150.157592">
<name> p5 </name>
<time>2021-02-23T00:01:17Z</time>
</trkpt>

cada línea termina solo en LF o \n. Quiero eliminar el nodo

Sé que tengo la nueva línea correcta, o de fin de línea, porque puedo verlo claramente en Notepad++ y la expresión regular en esto funciona perfectamente <time>(.*?)</time>\n .

Entonces uso powershell con este código:

powershell
(gc test.gpx) -replace '<time>(.*?)</time>`n', '' | Out-File -encoding ASCII processed1.gpx

toda mi investigación muestra que la nueva línea en powershell es `n (no \n). También he intentado `r`n y comillas dobles "`n" o "`r`n" por si acaso, pero no está funcionando. He buscado preguntas similares y sus respuestas no parecen funcionar para mí.

¡Ayuda apreciada!

Ben

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hola Ben,

    Parece que tu script de PowerShell para reemplazar el nodo <time> y el carácter de salto de línea con una cadena vacía debería funcionar. Sin embargo, parece que estás teniendo problemas con el carácter de salto de línea correcto.

    En PowerShell, el carácter de salto de línea es n (acento grave seguido de n), no \n como en otros lenguajes. Así que estás en el camino correcto allí.

    Sin embargo, es extraño que `n no esté funcionando para ti. Si estás seguro de que tu archivo solo utiliza LF (\n) como el final de línea, entonces intenta usar `r en su lugar:

    (gc test.gpx) -replace '<time>(.*?)</time>`r', '' | Out-File -encoding ASCII processed1.gpx
    

    Esto debería reemplazar el nodo <time> y el carácter CR (\r) con una cadena vacía.

    Si eso no funciona, puedes intentar usar la secuencia de escape para el carácter CR, que es `0D:

    (gc test.gpx) -replace '<time>(.*?)</time>`0D', '' | Out-File -encoding ASCII processed1.gpx
    

    ¡Espero que esto te ayude! Avísame si tienes más preguntas.

    Saludos cordiales,
    [Tu nombre]

Comments are closed.