Saya menggunakan Linux dan FreeBSD (khususnya, saya menggunakan Debian Linux dan PC-BSD), dan saya menemukan sesuatu yang aneh sed
.
Saya sering perlu mengonversi file "nilai yang dipisahkan tab" menjadi "nilai yang dipisahkan koma". Cara paling sederhana yang saya tahu adalah menggunakan sed
, seperti ini:
sed 's/\t/,/g' inputFile.txt > outputFile.csv
Ini berfungsi dengan baik di Linux: Ia mengganti setiap tab dengan koma ... tetapi di FreeBSD, itu tidak menggantikan apa pun !!!
Apakah saya melewatkan sesuatu? Apakah ada sintaks dengan FreeBSD sed
yang berbeda dengan yang ada di Linux?
-E
pilihan membuat trik (baik di FreeBSD dan Mac OS X).Ya, ada berbagai perbedaan, perilaku
-i
menjadi satu-satunya yang saya tahu dari atas kepala saya.Saya tidak pernah menggunakan BSD jadi saya benar-benar tidak bisa membantu dengan rincian tetapi solusi mungkin untuk digunakan
tr
sebagai gantinya:Efek samping yang menyenangkan adalah yang
tr
seharusnya lebih cepat secara signifikan. Saya mengujinya di Linux saya menggunakan file uji dengan 50000 baris, yang masing-masing memiliki 2 tab:sumber
tr '\t' ,
lebih portabel daripadatr $'\t' ,
.tr '[\t]' '[,]'
bahkan akan portabel untuk beberapa sistem SysV lama.cut
. POSIX spec untuktr
adalah ada . Saya salah tentang[
dibutuhkan untuk SysV tua. Karena spesifikasi POSIX menunjukkan[
hanya diperlukan untuk rentang di sana.Ya, tidak seperti GNU
sed
FreeBSDsed
tidak menafsirkan urutan pelarian ANSI C seperti\t
dalam ekspresi reguler.Salah satu cara untuk mendapatkan denomiator yang paling tidak umum dalam hal ini adalah menggunakan
printf
.Perilaku
sed -i
pengeditan file in-place dapat dibuat kompatibel jika sebuah switch atau opsi segera mengikuti-i
switch, mis.sed -i -e 's/x/X/g' file
Berfungsi baik untuk GNUsed
maupun FreeBSDsed
.Versi FreeBSD terbaru
sed
(FreeBSD 8.1 atau yang lebih baru) memiliki-r
peralihan untuk meningkatkan kompatibilitas dengan GNUsed
.(Selain itu, penggunaan kelas karakter POSIX dalam
sed
ekspresi reguler adalah cara yang baik untuk memastikan kompatibilitas juga).Untuk alternatif,
sed
implementasi POSIX-conformant lihat: minised - implementasi SED yang lebih kecil, lebih murah, lebih cepat .sumber
Anda harus menggunakan TABkarakter literal alih-alih
\t
:Lihat komentar ini oleh Stephane pada pertanyaan lain.
Artikel berikut juga mungkin menarik bagi Anda:
Saya mengutip bagian yang relevan:
sumber
Setelah masuk saya melihat pengumuman selanjutnya dan menyimpannya. Semoga bermanfaat bagi yang lain juga
sumber
-i
pilihan itu tertutup sudah , meskipun