交換字符前後的文本

交換字符前後的文本

code.txt我使用的是 Windows 7 。

        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

您可以下載Windows 版 Gawk適用於 Windows 的 sed

我只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 }

基斯

相關內容