trocar texto antes e depois de um caractere

trocar texto antes e depois de um caractere

Estou no Windows 7. Tenho um arquivo de texto grande code.txtcom 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 sedno 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

informação relacionada