Stop sed på windows fra at ændre \ r til \ r \ n

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger sed på Windows for at slette nogle overflødige linjer i et Unix-format (\ n line endings). Desværre erstatter sed disse linjestykker, selv i linjer, ændres det ikke til \ r \ n. Hvordan kan jeg stoppe sed fra gør det?


Min sed er en simpel sed-for-windows-standalone-exe:


C:dev>sed --version
super-sed version 3.59
based on GNU sed version 3.02.80

Bedste reference


Jeg ved ikke, hvordan du kan gøre det med sed på Windows, men har du prøvet:


unix2dos you\_file
sed ...
dos2unix you\_file

Andre referencer 1


GNU sed (http://gnuwin32.sourceforge.net/packages/sed.htm) har -b mulighed for 'binær tilstand', i. e. ikke erstatter \ n med \ r \ n. [6]


Hvis du bruger sed som følger med cygwin, bruger den normalt binær tilstand selv uden -b-indstillingen. Cygwin-kommandoer bruger nemlig inputfilbanen til at bestemme, om de skal køre i tekst eller binær tilstand, i. e. output \ r \ n eller \ n: http://www.cygwin.com/cygwin-ug-net/using-textbinary.html.
Som dokumentet siger, er binær tilstand standard for MS-DOS-vejnavne, og i min erfaring er de filsystemer, der er monteret som standard, også monteret i binær tilstand. [7]

Andre referencer 2


Beklager, men sed virker ikke som du vil, det vil sige sed!=Awk (som kan konfigureres).


Jeg downloadede den ssed eksekverbare og hjælpeproduktionen nævntede ikke nogen mulighed for dette, som jeg er sikker på, du ved. [8]


Du kan forsøge at ændre kildekoden eller kontakte forfatterne. [9]


Læser gennem NEWS filen i kildekoden, fandt jeg


* The s/// command now understands the following escape (in both halves):
a  an "alert" (BEL)
f  a form-feed

  a newline

  a carriage-return
	  a horizontal tab
v  a vertical tab
oNNN   a character with the octal value NNN
dNNN   a character with the decimal value NNN
xNN    a character with the hexadecimal value NN


Har du forsøgt `s/\ r//'som den sidste kommando i dit script?


Jeg gjorde en hurtig scanning i de fleste tekstfiler, men fandt ikke noget, som får mig til at tro på en CMD-line-løsning, der giver det, du har brug for.


Som du ikke vil bruge unix2dos, som en handling af reneste optimisme, tilbyder jeg muligheden for at bruge tr til cleaningout disse irriterende 's


 sed -i -f yourSedScript yourFile
 mv yourFile yourFile.wrk
 tr -d '15' yourFile.wrk > yourFile


Endelig, som det ser ud til, at hvis du redigerer Unix-filer på en Windows-boks, skal du overføre filer via 'ftp' eller lignende til at få din Unix til Windows, hvorfor ikke stole på ftp-mulighederne for at konvertere linjestykker?


Jeg håber det hjælper.

Andre referencer 3


Hvis du tilføjer parameteren -b behandler du filen som en binær fil, og det vil ikke ændre dine linjestykker.
Håndbogen angiver:


 -b, --binary

          open files in binary mode (CR+LFs are not processed specially)