J'ai lancé sed pour faire une substitution sur Windows et j'ai remarqué qu'il convertissait automatiquement les fins de ligne en Unix (\ n). Existe-t-il une option pour dire à sed d'utiliser les fins de ligne Windows (\ r \ n) ou mieux encore de conserver les fins de ligne du fichier?
Remarque: j'utilise sed de 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
programme.Réponses:
Vous pouvez utiliser le
-b
option de sed pour qu'il traite le fichier comme binaire. Cela résoudra le problème avec le sed de cygwin sous Windows.Exemple:
sed -b 's/foo/bar/'
Si vous souhaitez faire correspondre la fin de la ligne, n'oubliez pas de faire correspondre, capturer et copier le retour chariot facultatif.
Exemple:
sed -b 's/foo\(\r\?\)$/bar\1/'
Depuis la page de manuel sed :
la source
sed -i
sur cygwin (pour moi), mais vous pouvez contourner cela. Merci pour la mise à jour - les autres réponses étaient le dernier mot sur ce sujet pendant un certain temps.sed -i
: il est juste important de savoir comment le taper. Alors quesed -bi
etsed -i -b
fonctionne,sed -ib
ne fonctionne pas : consultez la page de manuel pour savoir pourquoi (utilise leb
comme suffixe pour la copie de sauvegarde).sed -bi 's/foo/bar/'
Vous pouvez essayer de sous-marin
\n
pour\r\n
à la fin de votre script existant comme ceci:ou peut-être
Si aucun des deux ci-dessus ne fonctionne, vous devrez consulter la page de manuel spécifique à votre version de
sed
pour voir si une telle option existe. Notez que les versions * nix desed
ne modifient pas les terminateurs de ligne sans qu'on vous le dise.Une autre alternative consiste à utiliser la
cygwin
versionsed
dont ne devrait pas avoir ce comportement indésirable.la source
0x0A
) et \ r \ n (0x0D 0x0A
) - cette solution proposée (de toujours réinjecter le \ r) le casse.Sinon, (la version cygwin de)
perl -pe
ne semble pas avoir ce problème.la source
sed -i -e 's/<img[^>]*\/>//g' *.xml
remplace les fins de ligne par '\ n'perl -i -p -e 's/<img[^>]*\/>//g' *.xml
préserve les fins de ligne d'origineGnuwin peut être supprimé pour gâcher les nouvelles lignes (win-> unix) si vous spécifiez uniquement le commutateur -b et redirigez. L'utilisation du commutateur -i (en ligne) le gâchera.
Par exemple, sed.exe -b "s / \ xFF \ xFE //" c: \ temp \ in.csv> c: \ temp \ out.csv
la source
-i
mode de travail dans ma réponse .J'ai trouvé que
sed-4.4.exe
de https://github.com/mbuilov/sed-windows est une pure victoire car elle-b
mode-i
mode sur place-z
mode avec des\0
délimiteurs au lieu de\n
qui peut être parfois aussi pratiqueVoir aussi la liste des options sed et la liste de tous les ports sed de Windows .
Notez que GnuWin32 sed 4.2.1 ne terminaisons ligne de corruption en
-bi
mode de et n'a pas le-z
mode du tout.la source