मुझे एक फ़ाइल के आसपास 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