Bir klasördeki her txt dosyasına sözcük yazma


10

"Cat" kelimesini bir klasördeki her .txt dosyasına nasıl yazabilirim?

Yanıtlar:


20

Basit bir iş yapacak:

for i in ./*.txt; do echo 'cat' >> "$i"; done;

Bu, geçerli dizindeki tüm txt dosyalarının bir listesini alır, onların içinden döngüler oluşturur ve echoonlara katılır (içeriğe eklenir). değiştirebileceğiniz >>için >kedi ile dosyaları içeriği üzerine yazmak.

Yapabileceğiniz başka bir şey, teebir akışı birden fazla dosyaya yönlendirmek için kullanmaktır .

Eklemek:

echo "cat" | tee -a *.txt

Üzerine yazmak için:

echo "cat" | tee *.txt

kullanılacak con echo "cat" >> *.txtnedir?
hytromo

4
@hakermania başarısızambiguous redirect
Zanna

13

Dosyalar boş değilse, seddöngü olmadan kullanabilirsiniz . Başlangıçta eklemek catiçin:

sed 'i\cat' *.txt

Sonuna eklemek için:

sed 'a\cat' *.txt

İkinci satırdan sonra eklemek için:

sed '2 a\cat' *.txt

İçindeki satırlardan önce eklemek fooiçin:

sed '/foo/ i\cat' *.txt

Yine de boş dosyalar üzerinde çalışmaz. Bir tür böcek.

(To aslında ihtiyacınız test ettikten sonra dosyalara yazma -iseçeneği: sed -i 'a\cat' *.txt)


Sed nefret ediyorum :)), çünkü onunla yapabileceğiniz birçok şey var ve bunların farkında değilim :))
Ravexina

@Ravexina sedbenim reçelim ;)
Zanna

neden 'i\cat'eğik çizgi yerine ters eğik çizgiyi kullanıyor?
phuclv

@ LưuVĩnhPhúc ters eğik çizgi isteğe bağlıdır aslında, 'icat'ya da koyabilirsiniz i cat. Ters eğik çizgi inanıyorum geleneksel.
Forwardlash

4

Python yaklaşımı:

#!/usr/bin/env python
import sys

for i in sys.argv[1:]:
    with open(i,'w') as fd:
        fd.write("cat\n")
  • syskomut satırı bağımsız değişkenlerini yinelemek için modül kullanır
  • her komut satırı argümanı yazmak için dosya olarak açılacaktır
  • yeni satıra sahip "kedi" bir sonraki dosyaya geçmeden önce dosyaya yazılır

Geçerli çalışma dizinindeki ./add_cat.py *.txttüm .txtdosyalar üzerinde çalışacak şekilde kullanım olacaktır . Bunun iyileştirilmesi, "cat" sabit kodlaması yerine yazmak için komut satırı argümanı # 1'i dize olarak kullanmayı içerebilir.

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.