VIM'de büyük (~ 2GB) bir dosya açmayı denedim ama tıkandı. Aslında dosyayı düzenlememe gerek yok, sadece verimli bir şekilde atlayın.
VIM'de çok büyük dosyalarla nasıl çalışabilirim?
:set binary
İlk sen olduğun sürece Vim iyi olmalı ...
VIM'de büyük (~ 2GB) bir dosya açmayı denedim ama tıkandı. Aslında dosyayı düzenlememe gerek yok, sadece verimli bir şekilde atlayın.
VIM'de çok büyük dosyalarla nasıl çalışabilirim?
:set binary
İlk sen olduğun sürece Vim iyi olmalı ...
Yanıtlar:
Bugün düzenlemem gereken 12 GB'lık bir dosyam vardı. Vim LargeFile eklentisi benim için çalışmadı. Hala tüm belleğimi kullandı ve sonra bir hata mesajı yazdırdı :-(. Hexedit'i her ikisi için de kullanamadım, çünkü hiçbir şey ekleyemez, sadece üzerine yazın. İşte alternatif bir yaklaşım:
Dosyayı böler, parçaları düzenler ve ardından yeniden birleştirirsiniz. Yine de iki kat daha fazla disk alanına ihtiyacınız var.
Düzenlemek istediğiniz satırı çevreleyen bir şey için grep:
grep -n 'something' HUGEFILE | head -n 1
Dosyanın bu aralığını çıkarın. Düzenlemek istediğiniz satırların 4. ve 5. satırda olduğunu söyleyin. Ardından şunları yapın:
sed -n -e '4,5p' -e '5q' HUGEFILE > SMALLPART
-n
Opsiyon şeyi yazdırmak için sed varsayılan davranışını bastırmak için gereklidir4,5p
4. ve 5. satırları yazdırır5q
5. satırı işledikten sonra iptal edilir Düzenleme SMALLPART
favori editörü kullanarak.
Dosyayı birleştirin:
(head -n 3 HUGEFILE; cat SMALLPART; sed -e '1,5d' HUGEFILE) > HUGEFILE.new
HUGEFILE.new
şimdi düzenlenmiş dosyanız olacak, orijinali silebilirsiniz HUGEFILE
.
Bu, uzun yıllardır tekrar eden bir soruydu. (Sayılar değişmeye devam ediyor, ancak kavram aynı: Bellekten daha büyük dosyaları nasıl görüntüleyebilirim veya düzenleyebilirim?)
Açıkçası more
veya less
sadece dosyaları okumaya yönelik iyi yaklaşımlar --- less
hatta vi
kaydırma ve arama için tuş atamaları gibi teklifler bile var .
"Büyük dosyalar" üzerine yapılan bir Freshmeat araması, iki editörün özellikle ihtiyaçlarınıza uygun olacağını gösterir.
Bunlardan biri: lfhex ... büyük bir dosya onaltılık düzenleyici ( Qt'ye bağlıdır) olabilir. Açıkçası bu, bir GUI kullanmayı gerektirir.
Bir diğeri konsol kullanımına uygun görünüyor: hed ... ve benzer bir vim
arayüze sahip olduğunu iddia ediyor (bir ex
mod dahil mi?).
Eminim, Linux / UNIX için bütünlüklerini belleğe yüklemeden dosyalar arasında sayfa ilerleyebilen başka editörler gördüm. Ancak isimlerini hatırlamıyorum. Başkalarını bu tür editörlere bağlantılarını eklemeye teşvik etmek için bu yanıtı bir "wiki" girişi yapıyorum. (Evet, split
ve kullanarak sorunu çözmenin yollarına aşinayım cat
; ancak editörleri düşünüyorum, özellikle bundan vazgeçebilecek ve bize bu tür yaklaşımların gerektirdiği zaman / gecikmelerden ve disk alanından tasarruf sağlayabilecek konsol / curses düzenleyicileri düşünüyorum) .
Dosyayı gerçekten düzenlemeniz gerekmediğinden:
view
(sadece denendi ve zamanlandı) 4 dakikadan biraz fazla sürüyor . Kabul ediyorum, bu tam olarak anlık değil, ama işe yarıyor.
Florian'ın nano kullanan cevabına dayanarak küçük bir senaryo yazdım (en sevdiğim editör):
#!/bin/sh
if [ "$#" -ne 3 ]; then
echo "Usage: $0 hugeFilePath startLine endLine" >&2
exit 1
fi
sed -n -e $2','$3'p' -e $3'q' $1 > hfnano_temporary_file
nano hfnano_temporary_file
(head -n `expr $2 - 1` $1; cat hfnano_temporary_file; sed -e '1,'$3'd' $1) > hfnano_temporary_file2
cat hfnano_temporary_file2 > $1
rm hfnano_temporary_file hfnano_temporary_file2
Bunu şu şekilde kullanın:
sh hfnano yourHugeFile 3 8
Bu örnekte, nano 3 ile 8 arasındaki satırları açacaktır, bunları düzenleyebilirsiniz ve hug dosyasındaki bu satırlar otomatik olarak kaydedilmiş satırlarınızla üzerine yazılacaktır.
Aynı problemi yaşadım, ama bu 300GB'lık bir mysql dökümü idi ve bundan kurtulmak DROP
ve değiştirmek istedim CREATE TABLE
, CREATE TABLE IF NOT EXISTS
bu yüzden iki çağrı çalıştırmak istemedim sed
. Dosyayı bu değişikliklerle kopyalamak için bu hızlı Ruby komut dosyasını yazdım:
#!/usr/bin/env ruby
matchers={
%q/^CREATE TABLE `foo`/ => %q/CREATE TABLE IF NOT EXISTS `foo`/,
%q/^DROP TABLE IF EXISTS `foo`;.*$/ => "-- DROP TABLE IF EXISTS `foo`;"
}
matchers.each_pair { |m,r|
STDERR.puts "%s: %s" % [ m, r ]
}
STDIN.each { |line|
#STDERR.puts "line=#{line}"
line.chomp!
unless matchers.length == 0
matchers.each_pair { |m,r|
re=/#{m}/
next if line[re].nil?
line.sub!(re,r)
STDERR.puts "Matched: #{m} -> #{r}"
matchers.delete(m)
break
}
end
puts line
}
Gibi çağrıldı
./mreplace.rb < foo.sql > foo_two.sql
chmod +x mreplace.rb
ilk önce bir exe gerektirdiği gibi çalıştırmak için , şunu da yapabilirsinizruby mreplace.rb ..
Kocaman biri gömlekleri (gelen baskılar karakterler için 1
için 99
):
cut -c 1-99 filename
Zaten geç, ancak dosyayı düzenlemeden sadece dosyada gezinmek istiyorsanız cat
, işi de yapabilirsiniz.
% cat filename | less
veya alternatif olarak basit:
% less filename
cat
ting dosyası ilk önce, ya bir dosya (bellekte tam olacağını anlamına gelir, delice aptal less
dosya talep edebilir) veya hiç aranmalıdır olamaz; cat
sadece statik çıktı akışı verir.
Eski konu. Ama yine de (kelime oyunu :)).
$less filename
Daha azı, düzenlemek istemezseniz ve sadece etrafına bakarsanız, büyük günlük dosyalarını incelemek için etkin bir şekilde çalışır.
Vi gibi daha az çalışarak arayın
En iyi bölüm, çoğu dağıtımda varsayılan olarak mevcuttur. Bu yüzden üretim ortamı için de sorun olmayacak.
bu eski ama nano, vim veya gvim kullanın