Ich habe sed ausgeführt, um Windows zu ersetzen, und festgestellt, dass Zeilenenden automatisch in Unix (\ n) konvertiert werden. Gibt es eine Option, um sed anzuweisen, Windows-Zeilenenden (\ r \ n) zu verwenden, oder noch besser, die Zeilenenden aus der Datei beizubehalten?
Hinweis: Ich verwende sed von unxutils: http://unxutils.sourceforge.net/
LC_ALL=C perl -i -e 'binmode $STDIN;undef $/;$_=<>;s|http://911coned.com|https://911coned.com|gm;print' education.html
git diff
Programm entdeckt.Antworten:
Sie können die
-b
Option für sed verwenden, damit die Datei als binär behandelt wird. Dies wird das Problem mit Cygwins Sed unter Windows beheben.Beispiel:
sed -b 's/foo/bar/'
Wenn Sie mit dem Zeilenende übereinstimmen möchten, denken Sie daran, den optionalen Wagenrücklauf abzugleichen, zu erfassen und zu kopieren.
Beispiel:
sed -b 's/foo\(\r\?\)$/bar\1/'
Von der sed man page :
quelle
sed -i
Cygwin (für mich) nicht funktioniert , aber Sie können das umgehen. Vielen Dank für das Update - die anderen Antworten waren für eine Weile das letzte Wort zu diesem Thema.sed -i
: Es ist nur wichtig, wie man es tippt. Währendsed -bi
undsed -i -b
arbeiten,sed -ib
funktioniert nicht : In der Manpage erfahren Sie, warum (verwendet dasb
als Suffix für die Sicherungskopie).sed -bi 's/foo/bar/'
Sie können versuchen, das
\n
for\r\n
am Ende Ihres vorhandenen Skripts wie folgt einzureichen:oder vielleicht
Wenn keine der beiden oben genannten Funktionen funktioniert, müssen Sie die spezifische Manpage für Ihre Version von konsultieren, um festzustellen
sed
, ob eine solche Option vorhanden ist. Beachten Sie, dass die * nix - Versionensed
haben nicht die Linie Terminator ändern , ohne gesagt, dies zu tun.Eine weitere Alternative ist es, die verwenden
cygwin
Version vonsed
der sollte nicht dieses unerwünschte Verhalten.quelle
0x0A
) als auch \ r \ n (0x0D 0x0A
) enthält, wird sie durch diese vorgeschlagene Lösung (indem das \ r immer wieder neu injiziert wird) unterbrochen.Alternativ
perl -pe
scheint (die Cygwin-Version von) dieses Problem nicht zu haben.quelle
sed -i -e 's/<img[^>]*\/>//g' *.xml
ersetzt Zeilenenden durch '\ n'perl -i -p -e 's/<img[^>]*\/>//g' *.xml
Gnuwin kann unterdrückt werden, um die Zeilenumbrüche (win-> unix) durcheinander zu bringen, wenn Sie nur den Schalter -b angeben und umleiten. Die Verwendung des Schalters -i (Inline) bringt es durcheinander.
ZB sed.exe -b "s / \ xFF \ xFE //" c: \ temp \ in.csv> c: \ temp \ out.csv
quelle
-i
in meiner Antwort .Ich habe festgestellt, dass
sed-4.4.exe
von https://github.com/mbuilov/sed-windows reiner Gewinn ist-b
Modus bei-i
Modus-z
Modus mit\0
Begrenzern an,\n
der manchmal auch praktisch sein kannSiehe auch Liste der Sed-Optionen und Liste aller Windows-Sed-Ports .
Beachten Sie, dass gnuwin32 sed 4.2.1 macht korrupt Zeilenende in
-bi
Modus und keinen-z
Modus überhaupt.quelle