行末を変更せずにファイルをその場で編集する

行末を変更せずにファイルをその場で編集する

Gitバージョン管理下のソースを変更する必要があります。ソースはVisual Studioプロジェクトファイルなので、ネイティブのMicrosoftになります。避ける行末ゲームを含む空白の問題。

変更前のファイルをemacsで確認したところ、^M明らかに存在していなかった。

次に、Linux マシンのスクリプトから以下を実行しました。

sed -i 's/odbc32.lib //g' *.vcproj
sed -i 's/odbccp32.lib //g' *.vcproj

変更点を見ると:

$ git diff cryptest.vcproj
diff --git a/cryptest.vcproj b/cryptest.vcproj
index cec447d..9ae71ea 100644
--- a/cryptest.vcproj
+++ b/cryptest.vcproj
@@ -76,7 +76,7 @@
...
Name="VCLinkerTool"
-        AdditionalDependencies="odbc32.lib odbccp32.lib Ws2_32.lib"
+        AdditionalDependencies="Ws2_32.lib"^M
        SuppressStartupBanner="true"
...

余分な空白を追加せずに置換を実行するにはどうすればよいでしょうか?

答え1

最近の emacs はファイルで使用されている行末を自動的に検出するため、ファイルに\nまたは\rまたは\r\n行末があるかどうかはわかりません。 emacs で編集すると、行末が保持され、模倣されます。

ファイルに何が含まれているかを実際に確認するには、 、タブ ( )、行末 ( )cat -vetなどの制御文字を表示するを試すことができます。^M^I$

作業ディレクトリとオブジェクトデータベース間でテキストファイルを移動するときに、自動的にに変換したり、その逆を行ったりするようにgit設定できます。こちらを参照してください。\r\n\n記事この記事Git がグローバルおよびリポジトリごとにどのように設定されているか、またそれをどのように変更できるかを確認します。

sedがどのように導入されたのかは分かりません\r。Unix システムを使用していると想定しています。


作業ディレクトリの上部で、次のコマンドを実行しても何も表示されないことを確認します。

git config core.eol
git config core.autocrlf
find . -name .gitattributes -o -name attributes

編集されていない元のファイルを実行しcat -vet、すべての行、一部の行、またはいずれの行も 3 文字で終わっていないかどうかを確認します^M$

関連情報