
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)
...
等式の最初の部分を 2 番目の部分で変更し、2 番目の部分を最初の部分で変更したいと思います。つまり、次のようになります。
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 }
キース