Executei o sed para fazer algumas substituições no windows e percebi que ele converte automaticamente as terminações de linha para Unix (\ n). Existe uma opção para dizer ao sed para usar terminações de linha do Windows (\ r \ n) ou ainda melhor para preservar as terminações de linha do arquivo?
Nota: Eu uso o sed da 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
programa.Respostas:
Você pode usar a
-b
opção do sed para que ele trate o arquivo como binário. Isso resolverá o problema com o sed do cygwin no Windows.Exemplo:
sed -b 's/foo/bar/'
Se você deseja combinar o final da linha, lembre-se de combinar, capturar e copiar o retorno de carro opcional.
Exemplo:
sed -b 's/foo\(\r\?\)$/bar\1/'
Na página de manual do sed :
fonte
sed -i
no cygwin (para mim), mas você pode contornar isso. Obrigado pela atualização - as outras respostas foram a última palavra sobre este assunto por um tempo.sed -i
: é importante apenas como digitá-lo. Enquantosed -bi
esed -i -b
trabalho,sed -ib
faz não trabalho: veja a página de manual para o porquê (usa ob
como o sufixo para a cópia de segurança).sed -bi 's/foo/bar/'
Você pode tentar substituir o
\n
for\r\n
no final de seu script existente, assim:ou talvez
Se nenhum dos dois acima funcionar, você terá que consultar a página de manual específica para sua versão do
sed
para ver se tal opção existe. Note-se que as versões * nix desed
que não alteram os terminadores de linha sem ser dito para fazê-lo.Outra alternativa é usar a
cygwin
versãosed
que não deve ter esse comportamento indesejável.fonte
0x0A
) e \ r \ n (0x0D 0x0A
) - esta solução proposta (de sempre reinjetar o \ r) o quebra.Alternativamente, (a versão cygwin de)
perl -pe
não parece ter esse problema.fonte
sed -i -e 's/<img[^>]*\/>//g' *.xml
substitui terminações de linha por '\ n'perl -i -p -e 's/<img[^>]*\/>//g' *.xml
preserva as terminações de linha originaisO Gnuwin pode ser suprimido para bagunçar as novas linhas (win-> unix) se você especificar apenas a opção -b e o redirecionamento. Usar a opção -i (embutido) vai bagunçar tudo.
Por exemplo, sed.exe -b "s / \ xFF \ xFE //" c: \ temp \ in.csv> c: \ temp \ out.csv
fonte
-i
modo de trabalho em minha resposta .Descobri que
sed-4.4.exe
em https://github.com/mbuilov/sed-windows é pura vitória, pois-b
modo-i
modo no local-z
modo com\0
delimitadores em vez do\n
que pode ser útil às vezes tambémVeja também a lista de opções do sed e a lista de todas as portas do Windows Sed .
Note-se que GnuWin32 sed 4.2.1 faz finais de linha corruptos em
-bi
modo e não tem-z
modo em tudo.fonte