Metin dosyasının sonuna çıktı nasıl eklenir


478

Komut çıktısını metin dosyasının sonuna nasıl eklerim?

Yanıtlar:


665

Çıktıyı bir dosyaya yönlendirmek >>yerine kullanın >:

your_command >> file_to_append_to

Eğer file_to_append_toyoksa, yaratılacaktır.

Misal:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world

4
Sorun, echoyeni satırları dizeden kaldırmasıdır. Bir dosyaya satırsonu içeren bir dize nasıl eklersiniz?
— Timothy Swan

5
@TimothySwan, -e seçeneğine inanıyorum.
— Valentin Grégoire

echo, dizeden yeni satırları kaldırmaz. Argümanı düzgün bir şekilde alıntılayamazsanız, kabuk dizeyi böler ve yankıya yankılar gönderir ve yankı yeni satırları bile görmez.
— William Pursell

106

To appenddosya kullanımı >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

o zaman çıktı

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

To overwritedosya kullanımı >

echo "hello tom" > read.txt
cat read.txt  

o zaman dışarı koymak

hello tom


74

>> işlecini kullanabilirsiniz. Bu, bir komuttan metin dosyasının sonuna veri ekler.

Bunu test etmek için koşmayı deneyin:

echo "Hi this is a test" >> textfile.txt

Bunu birkaç kez yapın ve çalıştırın:

cat textfile.txt

Metninizin, textfile.txt dosyasına birkaç kez eklendiğini göreceksiniz.


40

command >> file_to_append_toBir dosyaya eklemek için kullanın .

Örneğin echo "Hello" >> testFile.txt

DİKKAT: yalnızca tek bir >dosya kullanırsanız, dosyanın içeriğinin üzerine yazarsınız. Hiç olmamasını sağlamak için, ekleyebilirsiniz set -o noclobberadresinden Müşteri .bashrc.

Bu command > file_to_append_to, varolan bir dosyaya yanlışlıkla yazarsanız, dosyanın zaten var olduğunu size bildirmesini sağlar. Örnek hata mesajı:file exists: testFile.txt

Böylece, kullandığınızda >varolan bir dosyanın üzerine yazmanıza değil, yalnızca yeni bir dosya oluşturmanıza izin verir.



21

Kullanımı tee seçeneği ile -a (--append) bir kez ve ayrıca kullanımı anda birden fazla dosya eklenecek sağlayan sudo (korumalı dosyalara eklerken çok yararlı). Bunun yanı sıra, tüm kabuklar> ve >> operatörlerini desteklemediğinden, bash dışında başka mermiler kullanmanız ilginçtir.

echo "hello world" | sudo tee -a output.txt

Bu konu tee hakkında iyi cevaplara sahip


2
Bu, yeni bir satıra bir şeyler eklemenin en iyi yoludur.
— M_R_K

2
korumalı dosyalara eklemek için bir yol arıyordu ve bu
— sorunu

14

tüm soru için:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

bu, o.txt dosyasına 720 satır (30 * 24) ekler ve sonra dosyayı geçerli tarihe göre yeniden adlandırır.

Yukarıdakileri her saat cron ile çalıştırın veya

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done

11

Yankı yerine printf kullanırım çünkü daha güvenilirdir ve yeni satır gibi biçimlendirmeyi \ndüzgün şekilde işler .

Bu örnek, önceki örneklerde ekoya benzer bir çıktı üretir:

printf "hello world"  >> read.txt   
cat read.txt
hello world

Bununla birlikte, bu örnekte printf yerine echo yazacak olsaydınız, echo \ n bir karakter dizisi gibi davranır, böylece niyet yoksayılır

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world

7

İki şey yapmanızı öneririm:

  1. Kullanım >>Kabuk komut belirli dosyaya içeriğini eklemek için. Dosya adı sabitlenebilir veya bir desen kullanılarak yapılabilir.
  2. Kabuk betiğini tetiklemek için saatlik cronjob kurulumu

7

Örneğin dosyanız şunları içerir:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

Dosyanın sonuna eklemek istiyorsanız ----> 'metin' >> 'dosyaadı' arasındaki boşlukları hatırlayın

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

Ve dosyanın içeriğinin üzerine yazmak için:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write

1
Bu birçok ayrıntıda yanıltıcıdır. Alanlar önemli değildir ve boş bir çıktıyı borulamak cat... tamamen tuhaf. (Standart çıktıyı bir dosyaya yeniden yönlendirdiğiniz için boştur.)
— tripleee
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.