Bir dosyayı çevreleyen PHP etiketleri eklemem gerekiyor. Bunları kullanarak eklemek kolaydır
find . -exec echo "?>" >> '{}' \;
ama nasıl olabilir başa eklemek etiketi <?php
?
Bir dosyayı çevreleyen PHP etiketleri eklemem gerekiyor. Bunları kullanarak eklemek kolaydır
find . -exec echo "?>" >> '{}' \;
ama nasıl olabilir başa eklemek etiketi <?php
?
Yanıtlar:
sed -i "1s/^/<?php /" file
( -i
Yerinde düzenleme içindir.)
Daha taşınabilir sürüm:
ed file <<!
1s/^/<?php /
wq
!
sed
ve yedek bir sonek eklemeye izin veriyor.
-i
taşı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.
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/\$/ ?>/" {} \;
Bunu perl bir astar ile yapabilirsiniz:
perl -0777 -p -i -e "s/^/hey /g" testfile
-0777
Kuvvetler dosya Slurping modu, bu nedenle tüm dosya tek satır olarak okunur. -p
döngü sağlar. -i
dosyanı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.bak
yerine 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.
-i
bir 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, -p
bayrağı unutmak ) aksi takdirde bütün gününüzü mahvedebilir.
sed
akışları düzenlemek içindir - bir dosya akış değildir. ed
Veya bu amaç için tasarlanmış bir program kullanın ex
. -i
Seçeneği sed
aslı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
ed
amaçla nasıl kullanılacağını biliyorsanız , cevabınızda bunu gösterin.
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 find
tek astarını sevmeme rağmen :)
$FNAME
olmalı $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.
Basit bir yol var
echo "startstr$(cat filename)endstring" > filename.new