Bu çoğunlukla konu dışı, ancak kullanabilirsiniz
find -maxdepth 1 -type f -name '*.txt' | xargs python -c '
import fileinput
for line in fileinput.input(inplace=True):
print line.replace("blah", "blee"),
'
Buradaki ana fayda ... xargs ... -I {} ... sed ...hızdır: sed10 milyon kez çağırmaktan kaçınırsınız . Python kullanmaktan kaçınabilmeniz daha hızlı olurdu (python nispeten yavaş, nispeten), bu yüzden perl bu görev için daha iyi bir seçim olabilir. Eşdeğeri perl ile nasıl rahatça yapacağımdan emin değilim.
Bunun çalışma şekli, xargsPython'u tek bir komut satırına sığabilecek kadar çok argümanla çağıracak ve argümanları bitene kadar (bunlar tarafından sağlanır ls -f *.txt) yapmaya devam etmesidir . Her bir çağrının argümanlarının sayısı dosya adlarının uzunluğuna ve diğer bazı şeylere bağlı olacaktır. fileinput.inputFonksiyon her çağırma en argümanlar adlı dosyalardan ardışık satırları verir ve inplaceopsiyon sihirli "yakalamak" çıkışı ve her satırı değiştirmek için kullanın söyler.
Python'un dize replaceyönteminin regexps kullanmadığını unutmayın; eğer bunlara ihtiyacınız varsa, kullanmanız import reve kullanmanız gerekir print re.sub(line, "blah", "blee"). Bunlar, Perl-Uyumlu RegExps'tir ve bunlar, aldıklarınızın oldukça güçlendirilmiş versiyonlarıdır sed -r.
Düzenle
Akira yorumlarda belirtildiği gibi, komut ls -f *.txtyerine bir glob ( ) kullanan orijinal sürüm findçalışmaz çünkü globlar shell ( bash) tarafından işlenir . Bu, komut çalıştırılmadan önce, komut satırına 10 milyon dosya adının değiştirileceği anlamına gelir. Bu, bir komutun bağımsız değişken listesinin maksimum boyutunu aşacağı garantilidir. Bununla xargs --show-limitsilgili sisteme özgü bilgiler için kullanabilirsiniz .
Argüman listesinin maksimum boyutu da dikkate alınır xargs, bu da bu limite göre her bir python çağrısına geçirdiği argüman sayısını sınırlar. Yana xargshala Python oldukça birkaç kez çağırmak zorunda kalacak, akira önerisi kullanmak os.path.walkmuhtemelen kurtarmayacaksa biraz zaman listeleme dosyasını almak için.
sedHer dosya için çağırmaktan kaçınırsanız daha hızlı olur . Bir dizi dosyayı açmanın, düzenlemenin, kaydetmenin ve kapatmanın bir yolu olup olmadığından emin değilimsed; hız gerekliyse, belki perl veya python gibi farklı bir program kullanmak isteyebilirsiniz.