Modifica il file sul posto senza modificare le terminazioni di riga


0

Devo modificare le fonti sotto il controllo della versione di Git. I sorgenti sono file di progetto di Visual Studio, che li rende nativi Microsoft. Voglio evitare problemi con gli spazi bianchi, inclusi i giochi di fine linea.

Ho esaminato i file prima della modifica in emacs e ^Mchiaramente non era presente.

Ho quindi eseguito quanto segue da uno script di una macchina Linux:

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

Quando guardo le modifiche:

$ 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"
...

Come eseguire una sostituzione senza aggiungere spazi bianchi estranei?

Risposte:


1

In questi giorni emacs rileverà automaticamente le terminazioni di riga utilizzate in un file e quindi non vedrai se un file ha \no \ro \r\nterminazioni di riga. Qualsiasi modifica in emacs conserverà e imiterà le terminazioni di linea.

Per vedere davvero che cosa ha il file puoi provare cat -vetche mostra i caratteri di controllo inclusi ^M, tabs ( ^I) e end of line ( $).

Si noti che gitpuò essere configurato per convertire automaticamente \r\na \no viceversa quando si spostano i file di testo tra la directory di lavoro e il database degli oggetti. Vedi questo articolo e questo articolo per verificare come è configurato il tuo git, globalmente e per repository e come puoi cambiarlo.

È difficile vedere come sedavrebbe potuto introdurre \r. Suppongo che tu sia su un sistema Unix.


Nella parte superiore della directory di lavoro verificare che i seguenti comandi non mostrino nulla:

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

Esegui il file non modificato originale cat -vete controlla se tutte, alcune o nessuna delle righe termina con i 3 caratteri ^M$.


"Suppongo che tu sia su un sistema Unix ..." - sì (tipo di). Sono su un sistema Linux, non Unix: "... Ho quindi eseguito quanto segue da uno script di una macchina Linux" " .
jww

Per tornare alla domanda originale: "Come si esegue una sostituzione senza aggiungere spazi bianchi estranei?" . Non credo sia fornito nella tua risposta.
jww

Nella parte superiore della directory di lavoro puoi provare i seguenti comandi: git config core.eol git config core.autocrlf find . -name .gitattributes -o -name attributese se mostrano qualcosa aggiungi i risultati alla tua domanda. Inoltre, cat -vet cryptest.vcprojprima della modifica mostra le terminazioni di riga come 3 caratteri ^M$su tutte le righe, solo alcune o nessuna.
Meuh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.