交换字符前后的文本

交换字符前后的文本

我在 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

您可以下载适用于 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 }

基思

相关内容