поменять местами текст до и после символа

поменять местами текст до и после символа

Я работаю на Windows 7. У меня есть большой текстовый файл code.txtсо следующими равенствами

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

Я хочу заменить первую часть равенства на вторую, а вторую на первую. То есть:

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

Как мне с этим справиться?

До сих пор, если бы я работал в Linux, я мог бы использовать awk«=» в качестве разделителя полей и просто переставлять поля местами.

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

или с помощью sed:

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

Но, похоже, они не распознаются в Windows, поскольку у меня возникает следующая ошибка:

 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

решение1

Решение PowerShell:

  • работает на всех платформах
  • сохраняя возможный отступ

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

Чтобы сохранить в (другом) файле добавьте

| Set-Content .\newcode.txt

решение2

Вы можете скачатьGawk для Windowsиsed для Windows.

Я тестировал только sedв командной строке 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

решение3

Другой способ PowerShell:

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

Если вам необходимо сохранить отступы, просто измените блок ForEach (%):{ ' ' + $_.Right + ' = ' + $_.Left }

Кит

Связанный контент