Bir etiketi birkaç dosyanın başına nasıl ekleyebilirim?


Yanıtlar:


18
sed -i "1s/^/<?php /" file

( -iYerinde düzenleme içindir.)

Daha taşınabilir sürüm:

ed file <<!
1s/^/<?php /
wq
!

şık - Bu tarif etmek
üzereyim

Burada -i argümanına uzantı eklemem gerekiyor. Sed veya GNU sed kullanıyor musunuz?

Richard: Kullandığım kişi GNU olduğunu iddia ediyor sedve yedek bir sonek eklemeye izin veriyor.
user1686

2
BSD sed kullanıyorum ve yerinde düzenlemeye izin veriyor, ancak bir uzantı vermeliyim. yani 'sed -i .bak "PATTERN" dosyası'

3
-itaşınabilir değildir, sözdizimi uygulamalar arasında farklılık gösterir ve sembolik bağları kırar. Dosyaları düzenlemek için tasarlanmış bir uygulamayı kullanmak daha iyi olur.
Chris Down

5

Bunun AWKgibi bir filtre kullanabilirsiniz ,

awk '{if (NR == 1) printf "% s% s", "PREFIX", $ 0; aksi takdirde $ 0} yazdır 'testfile> newfile

PREFIXPhp önek dizesi nerede .


5

Henüz bir yorum bırakamıyorum, ancak hepsini tek bir adımda yapmak için:

find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;

Bayıldım, saatlerimi kurtardı.
Steve Hill

5

Bunu perl bir astar ile yapabilirsiniz:

perl -0777 -p -i -e "s/^/hey /g" testfile

-0777Kuvvetler dosya Slurping modu, bu nedenle tüm dosya tek satır olarak okunur. -pdöngü sağlar. -idosyanın yerinde düzenlenmesini sağlar. ^bir satırın başlangıcını gösterir.

$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf

Güncelleme: Yorumlarda belirtildiği gibi, -i.bakyerine kullanarak bir yedek otomatik oluşturmayı seçebilirsiniz -i. Bu, komutunuzdaki hatalarda ek güvenlik sağlar. Argümanı -i yedeklemenin soneki olur.

Bir grup dosyayı güncellerken, komutu ile çalıştırabilir, -i.backup${RANDOM}tüm dosyaların doğru şekilde güncellendiğini kontrol edebilir ve ardından bu uzantıya sahip tüm dosyaları kaldırabilirsiniz.


1
"0777 değeri Perl'in dosyaları bütünüyle bozmasına
Chris W. Rea

1
Eğer kullanımını tavsiye ederse -ibir eki olmayan bayrak, bu araçlar o okuyucuları uyarın hiçbir yedeği olsun . Birkaç karakter daha ( -i.bak) için, tek astarınızda yazım hatası olması durumunda bir yedek alırsınız. Oldukça basit bir yazım hatası (diyelim ki, -pbayrağı unutmak ) aksi takdirde bütün gününüzü mahvedebilir.
Telemachus

@Telemachus - Kabul etti. Güncellenmiş.

4

sedakışları düzenlemek içindir - bir dosya akış değildir. edVeya bu amaç için tasarlanmış bir program kullanın ex. -iSeçeneği sedaslında siler ve onu yeniden beri sadece taşınabilir değildir, aynı zamanda anlamsız olduğu, karşılaşabileceğiniz herhangi sembolik kıracak.

for file in foo bar baz; do
    ed -s "${file}" << EOF
0a
<?php 
.
w
EOF
done

Sunulan tek bir dosyayı düzenlemek için temel bir yoldur. Bu soruna cevap vermiyor gibi görünüyor - soru bir dizi dosyayı değiştirmekle ilgili (ilk bakışta açık olmayabilir). Bu edamaçla nasıl kullanılacağını biliyorsanız , cevabınızda bunu gösterin.
rozcietrzewiacz

@rozcietrzewiacz - Grawity aynı dosyayı tek bir dosyayı (kabul edildi) düzenleme yönteminden gösterdiğinden, cevaba uygun olduğunu düşündüm. Her iki durumda da, endişelerinizi hafifletmek için bir for döngüsüne koydum.
Chris Down

0

Dizindeki (in bash) her dosyanın sonuna bir şeyler eklemek için yazdıklarınıza bir alternatif :

for FNAME in *
do
    echo "?>" >> $FNAME
done

senin findtek astarını sevmeme rağmen :)


$FNAMEolmalı $fname- Kongre tarafından, biz çevre değişkenleri (PAGER, EDİTÖR'ÜN, KABUK, ...) ve iç kabuk değişkenleri yararlanmak (BASH_VERSION RASGELE, ...). Diğer tüm değişken adları en az bir küçük harf içermelidir. Bu sözleşme, çevresel ve dahili değişkenlerin yanlışlıkla geçersiz kılınmasını önler.
Chris Down

@Chris Down - tüm kariyerimi gördüğüm kongre ayarlarına göre değişti: küçük harf, büyük harf ve deve :)
warren

Deve ve küçük harfler gayet iyi. Her iki durumda da, ortam değişkeni olmayan değişkenler tam büyük harf olmamalıdır.
Chris Down

0

Basit bir yol var

echo "startstr$(cat filename)endstring" > filename.new

Bu, sondaki yeni satırlarla kesilecektir.
Chris Down

@ChrisDown dosyada satır sonları var mı?
Hogan
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.