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.