intercambiar texto antes y después de un carácter

intercambiar texto antes y después de un carácter

Estoy en Windows 7. Tengo un archivo de texto grande code.txtcon las siguientes igualdades

        oReservist.Role = Sheets("RECAP").Cells(ligne, 2)
        oReservist.Surname = Sheets("RECAP").Cells(ligne, 3)
        oReservist.Name = Sheets("RECAP").Cells(ligne, 4)
        ...

Quiero cambiar la primera parte de la igualdad por la segunda y la segunda por la primera. Es decir :

        Sheets("RECAP").Cells(ligne, 2) = oReservist.Role
        Sheets("RECAP").Cells(ligne, 3) = oReservist.Surname
        Sheets("RECAP").Cells(ligne, 4) = oReservist.Name 
        ...

¿Cómo puedo manejar eso?

Hasta ahora que si estuviera en Linux podría haber usado awk"=" como separador de campos, y simplemente darle la vuelta a los campos.

awk -F " = " '{OFS=FS;print $2,$1}' file

o usando sed:

sed 's/\(.*\) = \(.*\)/\2 = \1/' file

Pero parece que no se reconocen en Windows porque tengo el siguiente error:

 PS C:\Users\alliasjb\Desktop> sed
Le terme « sed » n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou programme exécutable.
 Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin d'accès est correct et réessayez

Respuesta1

Una solución de PowerShell:

  • trabajando en todas las plataformas
  • manteniendo una posible sangría

(Get-Content .\code.txt) -replace '(\s*)(.*)( = )(.*)','$1$4$3$2'

Para guardar en un (otro) archivo, agregue

| Set-Content .\newcode.txt

Respuesta2

Tú puedes descargarGawk para Windowsysed para Windows.

Solo probé seden el símbolo del sistema de Win10:

C:\bin>more test.txt
oReservist.Role = Sheets("RECAP").Cells(ligne, 2)
oReservist.Surname = Sheets("RECAP").Cells(ligne, 3)
oReservist.Name = Sheets("RECAP").Cells(ligne, 4)

C:\bin>sed.exe "s/\(.*\) = \(.*\)/\2 = \1/" test.txt
Sheets("RECAP").Cells(ligne, 2) = oReservist.Role
Sheets("RECAP").Cells(ligne, 3) = oReservist.Surname
Sheets("RECAP").Cells(ligne, 4) = oReservist.Name

Respuesta3

Otra forma de PowerShell:

Import-Csv .\code.txt -Delimiter '=' -Header 'Left', 'Right' |
   %{ $_.Right + ' = ' + $_.Left } | out-file .\newcode.txt

Si necesita conservar la sangría, simplemente modifique el bloque ForEach (%):{ ' ' + $_.Right + ' = ' + $_.Left }

keith

información relacionada