
Estoy en Windows 7. Tengo un archivo de texto grande code.txt
con 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é sed
en 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