Saya menjalankan sed untuk melakukan substitusi pada windows dan saya perhatikan bahwa itu secara otomatis mengubah akhiran baris menjadi Unix (\ n). Apakah ada opsi untuk memberi tahu sed untuk menggunakan akhiran baris Windows (\ r \ n) atau bahkan lebih baik untuk mempertahankan akhir baris dari file?
Catatan: Saya menggunakan sed dari 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
program.Jawaban:
Anda dapat menggunakan
-b
opsi sed agar memperlakukan file sebagai biner. Ini akan memperbaiki masalah dengan cygwin sed di Windows.Contoh:
sed -b 's/foo/bar/'
Jika Anda ingin mencocokkan akhir baris, ingatlah untuk mencocokkan, tangkap, dan salin carriage return opsional.
Contoh:
sed -b 's/foo\(\r\?\)$/bar\1/'
Dari halaman manual sed :
sumber
sed -i
pada cygwin (untuk saya), tetapi Anda dapat mengatasinya. Terima kasih atas pembaruannya - jawaban lain adalah kata terakhir tentang subjek ini untuk sementara waktu.sed -i
: yang penting adalah cara mengetiknya. Whilesed -bi
andsed -i -b
work,sed -ib
does not work: lihat halaman manual untuk mengetahui alasannya (menggunakanb
sebagai sufiks untuk salinan cadangan).sed -bi 's/foo/bar/'
Anda dapat mencoba sub
\n
untuk\r\n
di akhir skrip yang ada seperti ini:atau mungkin
Jika tidak satu pun dari dua di atas berfungsi, Anda harus melihat halaman manual spesifik untuk versi Anda
sed
untuk melihat apakah opsi seperti itu ada. Perhatikan bahwa * versi nix darised
yang tidak mengubah line terminator tanpa diberitahu untuk melakukannya.Alternatif lain adalah menggunakan
cygwin
versised
yang seharusnya tidak memiliki perilaku yang tidak diinginkan ini.sumber
0x0A
) dan \ r \ n (0x0D 0x0A
) - solusi yang diusulkan ini (selalu menginjeksi ulang \ r) akan memecahnya.Atau, (versi cygwin dari)
perl -pe
tampaknya tidak mengalami masalah ini.sumber
sed -i -e 's/<img[^>]*\/>//g' *.xml
mengganti akhiran baris dengan '\ n'perl -i -p -e 's/<img[^>]*\/>//g' *.xml
mempertahankan akhiran baris asliGnuwin dapat ditekan untuk mengacaukan baris baru (win-> unix) jika Anda hanya menentukan sakelar -b dan redirect. Menggunakan sakelar -i (inline) akan mengacaukannya.
Misalnya sed.exe -b "s / \ xFF \ xFE //" c: \ temp \ in.csv> c: \ temp \ out.csv
sumber
-i
mode kerja di jawaban saya .Saya telah menemukan bahwa
sed-4.4.exe
dari https://github.com/mbuilov/sed-windows benar-benar menang-b
mode-i
mode di tempat-z
mode dengan\0
pembatas, bukan\n
yang terkadang berguna jugaLihat juga daftar opsi sed dan daftar semua port windows sed .
Perhatikan bahwa gnuwin32 sed 4.2.1 tidak merusak akhiran baris dalam
-bi
mode dan tidak memiliki-z
mode sama sekali.sumber