
Ich verwende Windows 7. Ich habe eine große Textdatei code.txt
mit den folgenden Gleichungen
oReservist.Role = Sheets("RECAP").Cells(ligne, 2)
oReservist.Surname = Sheets("RECAP").Cells(ligne, 3)
oReservist.Name = Sheets("RECAP").Cells(ligne, 4)
...
Ich möchte den ersten Teil der Gleichheit durch den zweiten und den zweiten durch den ersten ersetzen. Das heißt:
Sheets("RECAP").Cells(ligne, 2) = oReservist.Role
Sheets("RECAP").Cells(ligne, 3) = oReservist.Surname
Sheets("RECAP").Cells(ligne, 4) = oReservist.Name
...
Wie kann ich damit umgehen?
Bis jetzt hätte ich unter Linux awk
„ = “ als Feldtrennzeichen verwenden und die Felder einfach umdrehen können.
awk -F " = " '{OFS=FS;print $2,$1}' file
oder mit sed:
sed 's/\(.*\) = \(.*\)/\2 = \1/' file
Aber es scheint, dass sie unter Windows nicht erkannt werden, da ich den folgenden Fehler erhalte:
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
Antwort1
Eine Powershell-Lösung:
- funktioniert auf allen Plattformen
- eine mögliche Einrückung beibehalten
(Get-Content .\code.txt) -replace '(\s*)(.*)( = )(.*)','$1$4$3$2'
Zum Speichern in einer (anderen) Datei anhängen
| Set-Content .\newcode.txt
Antwort2
Sie können herunterladenGawk für WindowsUndsed für Windows.
Ich habe nur sed
in der Win10-Eingabeaufforderung getestet:
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
Antwort3
Eine andere PowerShell-Methode:
Import-Csv .\code.txt -Delimiter '=' -Header 'Left', 'Right' |
%{ $_.Right + ' = ' + $_.Left } | out-file .\newcode.txt
Wenn Sie die Einrückung beibehalten müssen, ändern Sie einfach den ForEach (%)-Block:{ ' ' + $_.Right + ' = ' + $_.Left }
Keith