Bir metin dosyasının içeriğini nasıl kopyalayıp belirli bir satırdan başlayarak başka bir dosyaya yapıştırabilirim?


13

Bir metin dosyasının içeriğini kopyalayıp başka bir metin dosyasına yapıştırmam gerekiyor. İlk metin dosyasında 10 satırlık veri vardır ve bunların 5 numaralı satırdan başlayarak ikinci metin dosyasına kopyalanmaları gerekir (örneğin). İkinci metin dosyasında bu veriler satır 5'ten satır 14'e yazılmalıdır. Bu nasıl yapılabilir? Şimdiden teşekkürler. Beni Linux'la ilgili bir çaylak olarak düşün.

Yanıtlar:


10

headve tailçözüm

Kaynak dosyanın çağrıldığını ~/ave eklenecek dosyanın çağrıldığını varsayın ~/b. Birleştirilen dosyayı içine koyacağız ~/c:

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
  • Yol ~/, /home/userdizin adınız için kısa el
  • head, dosyanın ilk beş satırını ayeni oluşturulan dosyaya kopyalarc
  • cat dosyanın içeriğini listeler ve dosyaya beklerc
  • tail a, 6. satırdan başlayarak dosya sonuna kadar dosya eklerc

Doğrulamadan sonra birleştirilmiş dosyayı yeniden adlandırın

Bu dosyayı doğruladıktan sonra cdosyalarından doğru birleştirilir ave bbiz adlandırmak olacak ckadar akullanarak:

mv ~/c ~/a
  • mvdosyayı cdosyaya taşır a. Veriler fiziksel olarak taşınmaz. Dosya yeniden adlandırılır ve bu da zaman kazandırır.

Cevabınız için teşekkür ederim. Sadece iyi çalıştı. Ancak bunu üçüncü bir metin dosyası kullanmadan yapmanın başka bir yolu var mı?
G. Paschalis

Üçüncü dosya, tamamlandığında kaynak dosya olarak yeniden adlandırılabilir. Önce dosyayı görebilmenin en iyi yol olduğunu düşündüm. Şimdi cevaba ek adımlar ekleyeceğim.
WinEunuuchs2Unix

Veya ...(head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt

1
@JJoao Bu güzel bir satır özeti :) Öğretim amaçları için komut yöntemi başına bir satır kullanmayı tercih ve if ifadeleri iç içe. Ancak kopyalama ve terminale yapıştırma için tek gömlekleri seviyorum!
WinEunuuchs2Unix

16

Buradaki en kolay araç olabilir sed. Takmak için b.txtiçine a.txt5 satırdan sonra, yazabilirsiniz:

sed '5r b.txt' a.txt

sedargüman ( a.txt) olarak belirtilen dosyayı satır satır okur . Bir komut tarafından değiştirilmedikçe tüm satırlar, girişte göründükleri gibi çıktıda çoğaltılır.

5Aşağıdaki komut yerine getirilir hangi bir adres (satır numarası) 'dir. Kullandığımız komut r, bir dosya adını bağımsız değişken olarak alır (burada b.txt), onu tamamen okur ve geçerli satırdan sonra çıktıya ekler.

Yukarıda olduğu gibi, bu sedkomut satırı çıktıyı herhangi bir dosyaya yazmadan yalnızca terminale yazdıracaktır. Bash'in çıkış yeniden yönlendirmesini kullanarak dosyayı yeni bir dosyaya (giriş dosyalarından herhangi birine değil!) Yönlendirebilirsiniz:

sed '5r b.txt' a.txt > c.txt

Veya 's ("yerinde" için) anahtarını a.txtkullanarak dış girdi dosyasını doğrudan değiştirebilirsiniz . Bunu şu şekilde yazarsanız , ilk girdi ekiyle birlikte ilk girdi dosyasının yedek bir kopyasını oluşturur :sed-i-i.bak.bak

sed -i '5r b.txt' a.txt

Bir örnek:

$ cat a.txt 
January
February
March
April
May
October
November
December

$ cat b.txt 
June
July
August
September

$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December

0

(@ByteCommander şık örneğini yeniden kullanma :)

awk '1; NR==5 {system("cat b.txt")}' a.txt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.