मुझे एक फ़ाइल के आसपास PHP टैग जोड़ने की जरूरत है। इसका उपयोग करके उन्हें जोड़ना आसान है
find . -exec echo "?>" >> '{}' \;
लेकिन मैं टैग को कैसे रोक सकता हूं <?php
?
मुझे एक फ़ाइल के आसपास PHP टैग जोड़ने की जरूरत है। इसका उपयोग करके उन्हें जोड़ना आसान है
find . -exec echo "?>" >> '{}' \;
लेकिन मैं टैग को कैसे रोक सकता हूं <?php
?
जवाबों:
sed -i "1s/^/<?php /" file
( -i
इन-प्लेस एडिट के लिए है।)
अधिक पोर्टेबल संस्करण:
ed file <<!
1s/^/<?php /
wq
!
sed
, और यह एक बैकअप प्रत्यय जोड़ने की अनुमति देता है।
-i
पोर्टेबल नहीं है, सिंटैक्स कार्यान्वयन के बीच भिन्न होता है, और यह सिमिलिंक को तोड़ता है। आप एक ऐसे एप्लिकेशन का उपयोग करके बेहतर होंगे जो वास्तव में फ़ाइलों को संपादित करने के लिए डिज़ाइन किया गया है।
मैं एक टिप्पणी अभी तक नहीं छोड़ सकता, लेकिन यह सब एक चरण में करना है:
find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
आप ऐसा कर सकते हैं, जिसमें एक पर्ल वन-लाइनर है:
perl -0777 -p -i -e "s/^/hey /g" testfile
-0777
बलों फ़ाइल slurping मोड, इसलिए पूरी फ़ाइल एक पंक्ति के रूप में पढ़ा जाता है। -p
सक्षम बनाता है पाशन। -i
फ़ाइल के संपादन को सक्षम करता है। ^
एक पंक्ति की शुरुआत का संकेत देता है।
$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf
अद्यतन: जैसा कि टिप्पणियों में बताया गया है, आप -i.bak
इसके बजाय का उपयोग करके बैकअप को स्वतः उत्पन्न करने के लिए चुन सकते हैं -i
। यह आपकी कमांड में त्रुटियों के मामले में अतिरिक्त सुरक्षा प्रदान करता है। -i
बैकअप का प्रत्यय बनने का तर्क ।
फ़ाइलों का एक गुच्छा अद्यतन करते समय, आप के साथ कमांड चला सकते हैं -i.backup${RANDOM}
, जांचें कि सभी फाइलें सही ढंग से अपडेट की गई हैं, फिर उस एक्सटेंशन के साथ सभी फाइलें हटा दें।
-i
बिना प्रत्यय के ध्वज का उपयोग करने की सलाह देते हैं , तो कृपया पाठकों को चेतावनी दें कि इसका मतलब है कि आपको कोई बैकअप नहीं मिलेगा । कुछ वर्णों के लिए अधिक ( -i.bak
), आपके वन-लाइनर में एक टाइपो शामिल होने की स्थिति में आपको एक बैकअप मिलता है। एक काफी सरल टाइपो (कहते हैं, -p
ध्वज को भूल जाना ) आपके पूरे दिन को बर्बाद कर सकता है।
sed
धाराओं के संपादन के लिए है - एक फ़ाइल एक धारा नहीं है। एक प्रोग्राम का उपयोग करें जो इस उद्देश्य के लिए है, जैसे ed
या ex
। यह -i
विकल्प sed
केवल पोर्टेबल नहीं है, यह आपके द्वारा सामना किए जाने वाले किसी भी सिम्बल को भी तोड़ देगा, क्योंकि यह अनिवार्य रूप से इसे हटा देता है और इसे फिर से बनाता है, जो कि व्यर्थ है।
for file in foo bar baz; do
ed -s "${file}" << EOF
0a
<?php
.
w
EOF
done
ed
उस उद्देश्य के लिए कैसे उपयोग किया जाए, तो अपने उत्तर में यह दिखाएं।
निर्देशिका में प्रत्येक फ़ाइल के अंत में कुछ जोड़ने के लिए आपने जो लिखा उसका एक विकल्प bash
:
for FNAME in *
do
echo "?>" >> $FNAME
done
हालांकि मुझे आपका find
वन-लाइनर पसंद है :)
$FNAME
होना चाहिए $fname
- सम्मेलन द्वारा, हम पर्यावरण चर (PAGER, EDITOR, शेल, ...) और आंतरिक शेल चर (BASH_VERSION, RANDOM, ...) को कैपिटल करते हैं। अन्य सभी चर नामों में कम से कम एक लोअरकेस अक्षर होना चाहिए। यह सम्मेलन गलती से पर्यावरण और आंतरिक चर को ओवरराइड करने से बचता है।
सरल तरीका है
echo "startstr$(cat filename)endstring" > filename.new