
Я работаю на 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 }
Кит