
Estou no Windows 7. Tenho um arquivo de texto grande code.txt
com as seguintes igualdades
oReservist.Role = Sheets("RECAP").Cells(ligne, 2)
oReservist.Surname = Sheets("RECAP").Cells(ligne, 3)
oReservist.Name = Sheets("RECAP").Cells(ligne, 4)
...
Quero mudar a primeira parte da igualdade pela segunda e a segunda pela primeira. Isto é:
Sheets("RECAP").Cells(ligne, 2) = oReservist.Role
Sheets("RECAP").Cells(ligne, 3) = oReservist.Surname
Sheets("RECAP").Cells(ligne, 4) = oReservist.Name
...
Como posso lidar com isso?
Até agora se eu estivesse no Linux poderia ter usado awk
"=" como separador de campos, e simplesmente virar os campos.
awk -F " = " '{OFS=FS;print $2,$1}' file
ou usando sed:
sed 's/\(.*\) = \(.*\)/\2 = \1/' file
Mas parece que eles não são reconhecidos no Windows porque tenho o seguinte erro:
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
Responder1
Uma solução Powershell:
- trabalhando em todas as plataformas
- mantendo um possível recuo
(Get-Content .\code.txt) -replace '(\s*)(.*)( = )(.*)','$1$4$3$2'
Para salvar em um (outro) arquivo, acrescente
| Set-Content .\newcode.txt
Responder2
Você pode baixarGawk para Windowsesed para Windows.
Testei apenas sed
no prompt de comando do 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
Responder3
Outra maneira do PowerShell:
Import-Csv .\code.txt -Delimiter '=' -Header 'Left', 'Right' |
%{ $_.Right + ' = ' + $_.Left } | out-file .\newcode.txt
Se você precisar preservar o recuo, basta modificar o bloco ForEach (%):{ ' ' + $_.Right + ' = ' + $_.Left }
Keith