Apa cara terbaik untuk mengonversi CRLF ke umpan baris dalam file di Linux?
Saya telah melihat perintah sed , tetapi adakah yang lebih sederhana?
Apa cara terbaik untuk mengonversi CRLF ke umpan baris dalam file di Linux?
Saya telah melihat perintah sed , tetapi adakah yang lebih sederhana?
Jawaban:
Gunakan perintah ini:
fromdos yourtextfile
Sebaliknya:
todos yourtextfile
Perintah-perintah ini ditemukan dalam paket tofrodos (pada distribusi terbaru), yang juga menyediakan dua pembungkus unix2dos dan dos2unix yang meniru alat unix lama dengan nama yang sama.
find . -name '*.txt' -print0 | xargs -null fromdos
Gunakan dos2unix
.
dos2unix - Konverter format file teks DOS / MAC ke UNIX
dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...] Options: [-hkqV] [--help] [--keepdate] [--quiet] [--version]
Saya lebih suka perl :
perl -lne 's/\r//g; print' winfile.txt > unixfile.txt
Tapi itu sangat cocok untuk kegunaan saya, dan sangat mudah bagi saya untuk mengingatnya. Tidak semua sistem memiliki perintah dos2unix, tetapi sebagian besar yang saya kerjakan memiliki penerjemah perl.
Lainnya adalah recode , pengganti yang kuat untuk dos2unix dan iconv; itu tersedia dalam paket "recode" di repositori Debian:
recode ibmpc..lat1 winfile.txt # dos2unix
recode lat1..ibmpc unixfile.txt # unix2dos
Untuk penggemar awk :
awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt
... dan sed :
sed 's/\r$//' winfile.txt > unixfile.txt
Dan sekarang, hanya sedikit lebih sedikit berbelit-belit daripada menghapus CR dengan tangan di hex editor, langsung dari salah satu teman stackoverflow.com kami , dapat digunakan dengan juru bahasa daging sapi (terletak di repositori Debian lingkungan yang ramah),
dos2unix di brainfuck !
,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.
terima kasih banyak kepada jk karena telah menghabiskan satu jam hidupnya untuk menulis ini!
Saya melakukan ini di Bash :
cat cr_stuffed.file | tr -d \r > no_more_crs.file
Saya menemukan cara yang sangat mudah ... Buka file dengan nano: ## nano file.txt
tekan Ctrl + O untuk menyimpan, tetapi sebelum menekan Enter tekan: Alt + D untuk beralih antara akhir baris DOS dan Unix / Linux, atau: Alt + M untuk beralih antara Mac dan akhir baris Linux Unix / Linux lalu tekan Enter untuk menyimpan dan Ctrl + X untuk keluar.
Alt+d
. Terkadang alt dicegat oleh program terminal, jadi Anda bisa menggunakannya esc+d
.
Jika Anda menginginkan metode GUI, coba editor teks Kate (editor teks tingkat lanjut lainnya mungkin dapat menangani ini juga). Buka dialog temukan / Ganti ( Ctrl+ R), dan ganti \r\n
dengan \n
. (NB: Anda harus memilih "Ekspresi reguler" dari tarik turun dan batalkan pilihan "Pilihan saja" dari opsi.)
EDIT: Atau, jika Anda hanya ingin mengkonversi ke format Unix, kemudian gunakan pilihan menu Tools
> End of Line
> Unix
.
\r\n
untuk \n
kemudian menggunakan pencarian / ganti lebih mudah daripada mengingat OS mana yang menggunakan baris yang berakhiran. ;)
Rekatkan ini ke skrip Python dos2unix.py .
#!/usr/bin/env python
"""\
convert dos linefeeds (crlf) to unix (lf)
usage: dos2unix.py <input> <output>
"""
import sys
if len(sys.argv[1:]) != 2:
sys.exit(__doc__)
content = ''
outsize = 0
with open(sys.argv[1], 'rb') as infile:
content = infile.read()
with open(sys.argv[2], 'wb') as output:
for line in content.splitlines():
outsize += len(line) + 1
output.write(line + '\n')
print("Done. Saved %s bytes." % (len(content)-outsize))
Harus bekerja pada platform apa pun dengan Python diinstal. Area publik.
CR LF
untuk LF
menggunakan awk :
awk -v RS='\r?\n' 1
command | awk -v RS='\r?\n' 1
awk -v RS='\r?\n' 1 filename
Contoh penggunaan:
echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' 1 | hexdump -C
Penjelasan:
-v RS='\r?\n'
mengatur variabel RS ( input r ecord s eparator) menjadi \r?\n
, artinya input dibaca baris demi baris dipisahkan oleh LF ( \n
) yang dapat ( ?
) didahului oleh CR ( \r
).
1
adalah script awk dieksekusi. Sebuah skrip terdiri dari condition { action }
. Dalam hal ini, 1
adalah kondisi yang bernilai true. Tindakan dihilangkan, sehingga tindakan default dijalankan, yang berarti mencetak baris saat ini (yang juga bisa ditulis sebagai {print $0}
atau hanya {print}
).
LF
ke CR LF
: Anda dapat mengatur variabel ORS
( eparator r ecord s o utput ) untuk memodifikasi garis akhir dari output. Contoh:
echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' -v ORS='\r\n' 1 | hexdump -C
Saya menggunakan skrip ini untuk file yang saya perlukan untuk mentransfer file darurat dari sistem windows ke sistem unix.
find . -type f | xargs file | grep CRLF | cut -d: -f1 | xargs dos2unix
find . -type f
Temukan semua file, secara rekursif di direktori tempat Anda menjalankan perintah
xargs file
Lulus ke program file untuk mendapatkan analisis file.
grep CRLF
Kami hanya ingin output file yang menunjukkan CRLF.
cut -d: -f1
Dapatkan output hingga ke warna. buang sisanya. Kami seharusnya hanya memiliki nama file sekarang
xargs dos2unix