Ini adalah solusi Python yang bagus dan rapi. Saya tidak berusaha untuk singkat di sini.
Ini memodifikasi file di tempat, daripada membuat salinan file dan menghapus baris baru dari baris terakhir salinan. Jika file berukuran besar, ini akan jauh lebih cepat daripada solusi Perl yang dipilih sebagai jawaban terbaik.
Ini memotong file dengan dua byte jika dua byte terakhir adalah CR / LF, atau satu byte jika byte terakhir adalah LF. Itu tidak berusaha untuk memodifikasi file jika byte terakhir tidak (CR) LF. Ini menangani kesalahan. Diuji dalam Python 2.6.
Masukkan ini dalam file yang disebut "striplast" dan chmod +x striplast
.
#!/usr/bin/python
# strip newline from last line of a file
import sys
def trunc(filename, new_len):
try:
# open with mode "append" so we have permission to modify
# cannot open with mode "write" because that clobbers the file!
f = open(filename, "ab")
f.truncate(new_len)
f.close()
except IOError:
print "cannot write to file:", filename
sys.exit(2)
# get input argument
if len(sys.argv) == 2:
filename = sys.argv[1]
else:
filename = "--help" # wrong number of arguments so print help
if filename == "--help" or filename == "-h" or filename == "/?":
print "Usage: %s <filename>" % sys.argv[0]
print "Strips a newline off the last line of a file."
sys.exit(1)
try:
# must have mode "b" (binary) to allow f.seek() with negative offset
f = open(filename, "rb")
except IOError:
print "file does not exist:", filename
sys.exit(2)
SEEK_EOF = 2
f.seek(-2, SEEK_EOF) # seek to two bytes before end of file
end_pos = f.tell()
line = f.read()
f.close()
if line.endswith("\r\n"):
trunc(filename, end_pos)
elif line.endswith("\n"):
trunc(filename, end_pos + 1)
PS Dalam semangat "Perl golf", inilah solusi Python terpendek saya. Ini menghirup seluruh file dari input standar ke dalam memori, menghapus semua baris baru pada akhirnya, dan menulis hasilnya ke output standar. Tidak sesingkat Perl; Anda tidak bisa mengalahkan Perl untuk hal-hal kecil yang rumit dan cepat seperti ini.
Hapus "\ n" dari panggilan ke .rstrip()
dan itu akan menghapus semua ruang putih dari akhir file, termasuk beberapa baris kosong.
Masukkan ini ke dalam "slurp_and_chomp.py" dan kemudian jalankan python slurp_and_chomp.py < inputfile > outputfile
.
import sys
sys.stdout.write(sys.stdin.read().rstrip("\n"))