文字の前後のテキストを入れ替える

文字の前後のテキストを入れ替える

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

sedWin10 コマンドプロンプトでのみテストしました:

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 }

キース

関連情報