Bir sürü dosyayı yinelemenin ve metni aramanın / değiştirmenin en iyi yolu?


1

Oldukça basit olması gereken bir şeyi yaparken sorun yaşıyorum. İşte işe yarayacağını hayal ediyorum:

find . -name *.txt -exec sed 's/oldtext/newtext/g' {} > tmp \\; mv tmp {} \;

Ne yazık ki bir dosyayı ayarlayamıyorum ve kendi kendine çöp alamıyorum. Ancak geçici bir dosyaya nasıl bırakılacağını ve ardından hemen o dosyayı nasıl çözeceğimi bilemiyorum. Biliyorum \\; yanlıştır ancak bir komutun ardından diğerinin nasıl çalıştırılacağını çözemiyorum.

Yanıtlar:


0

-iSeçeneğine bakın man sed.

-i[SUFFIX], --in-place[=SUFFIX]

edit files in place (makes backup if extension supplied)

Daha az kullanışlı, ancak ilişkili olarak, birden çok -execs'yi birlikte dizebilirsiniz ; soldan sağa idam edilirler.

tmp=$(tempfile)
find . -name '*.txt' -exec sed 's/oldtext/newtext/g' '{}' > $tmp \; -exec mv $tmp '{}' \;

(Tırnak içine almak Not *.txt, {}ve kaçan ;onları kabuk tarafından yorumlanır değil ortaya.)


0

Vim'i Ex modunda kullanabilirsiniz:

find -name '*.txt' -exec ex -sc '%s/OLD/NEW/g|x' {} ';'
  1. % tüm satırları seç

  2. s vekil

  3. g küresel değişim

  4. x kaydet ve kapat

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.