我在 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 }
基思