Text vor und nach einem Zeichen vertauschen

Text vor und nach einem Zeichen vertauschen

Ich verwende Windows 7. Ich habe eine große Textdatei code.txtmit 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 sedin 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

verwandte Informationen