मैं कई फ़ाइलों की शुरुआत में टैग को कैसे रोक सकता हूं?


18

मुझे एक फ़ाइल के आसपास PHP टैग जोड़ने की जरूरत है। इसका उपयोग करके उन्हें जोड़ना आसान है

find . -exec echo "?>" >> '{}' \;

लेकिन मैं टैग को कैसे रोक सकता हूं <?php?

जवाबों:


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

( -iइन-प्लेस एडिट के लिए है।)

अधिक पोर्टेबल संस्करण:

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

nifty - यह थोड़ा आसान है जो मैं वर्णन करने वाला था :)
वॉरेन

मुझे यहाँ -i तर्क में विस्तार जोड़ना होगा। क्या आप sed या GNU sed का उपयोग कर रहे हैं?

रिचर्ड: मैं जिस GNU होने के दावे का उपयोग कर रहा हूं sed, और यह एक बैकअप प्रत्यय जोड़ने की अनुमति देता है।
user1686

2
मैं बीएसडी sed का उपयोग कर रहा हूं, और यह जगह संपादन की अनुमति देता है, लेकिन मुझे इसे विस्तार देने की आवश्यकता है। यानी 'sed -i .bak "PATTERN" फ़ाइल'

3
-iपोर्टेबल नहीं है, सिंटैक्स कार्यान्वयन के बीच भिन्न होता है, और यह सिमिलिंक को तोड़ता है। आप एक ऐसे एप्लिकेशन का उपयोग करके बेहतर होंगे जो वास्तव में फ़ाइलों को संपादित करने के लिए डिज़ाइन किया गया है।
क्रिस डाउन

5

आप AWKइस तरह से एक फिल्टर का उपयोग कर सकते हैं ,

awk '{if (NR == 1) प्रिंटफ "% s% s", "PREFIX", $ 0; बाकी $ 0} 'testfile> newfile प्रिंट करें

PREFIXआपकी php उपसर्ग स्ट्रिंग कहां है।


5

मैं एक टिप्पणी अभी तक नहीं छोड़ सकता, लेकिन यह सब एक चरण में करना है:

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

इसे प्यार करो, मुझे घंटों बचाया।
स्टीव हिल

5

आप ऐसा कर सकते हैं, जिसमें एक पर्ल वन-लाइनर है:

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}, जांचें कि सभी फाइलें सही ढंग से अपडेट की गई हैं, फिर उस एक्सटेंशन के साथ सभी फाइलें हटा दें।


1
"मान 0777 के कारण पर्ल को पूरी तरह से फाइलें खराब हो जाएंगी
क्रिस डब्ल्यू। री।

1
यदि आप -iबिना प्रत्यय के ध्वज का उपयोग करने की सलाह देते हैं , तो कृपया पाठकों को चेतावनी दें कि इसका मतलब है कि आपको कोई बैकअप नहीं मिलेगा । कुछ वर्णों के लिए अधिक ( -i.bak), आपके वन-लाइनर में एक टाइपो शामिल होने की स्थिति में आपको एक बैकअप मिलता है। एक काफी सरल टाइपो (कहते हैं, -pध्वज को भूल जाना ) आपके पूरे दिन को बर्बाद कर सकता है।
टेलीमेकस

@ टेल्मैचस - सहमत। अपडेट किया गया।

4

sedधाराओं के संपादन के लिए है - एक फ़ाइल एक धारा नहीं है। एक प्रोग्राम का उपयोग करें जो इस उद्देश्य के लिए है, जैसे edया ex। यह -iविकल्प sedकेवल पोर्टेबल नहीं है, यह आपके द्वारा सामना किए जाने वाले किसी भी सिम्बल को भी तोड़ देगा, क्योंकि यह अनिवार्य रूप से इसे हटा देता है और इसे फिर से बनाता है, जो कि व्यर्थ है।

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

आपने जो प्रस्तुत किया है, वह एकल फ़ाइल को संपादित करने का एक मूल तरीका है। यह समस्या का जवाब नहीं देता है - सवाल कई फाइलों को संशोधित करने के बारे में है (हालांकि यह पहली नज़र में स्पष्ट नहीं हो सकता है)। यदि आप जानते हैं कि edउस उद्देश्य के लिए कैसे उपयोग किया जाए, तो अपने उत्तर में यह दिखाएं।
rozcietrzewiacz

@rozcietrzewiacz - चूंकि ग्रैविटी ने एकल फ़ाइल को संपादित करने की एक ही विधि का प्रदर्शन किया (जिसे स्वीकार किया गया), मुझे लगा कि यह उत्तर के लिए उपयुक्त है। किसी भी तरह से, मैं इसे लूप में डाल देता हूं, जिससे आपकी चिंताओं को कम करना चाहिए।
क्रिस डाउन

0

निर्देशिका में प्रत्येक फ़ाइल के अंत में कुछ जोड़ने के लिए आपने जो लिखा उसका एक विकल्प bash:

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

हालांकि मुझे आपका findवन-लाइनर पसंद है :)


$FNAMEहोना चाहिए $fname- सम्मेलन द्वारा, हम पर्यावरण चर (PAGER, EDITOR, शेल, ...) और आंतरिक शेल चर (BASH_VERSION, RANDOM, ...) को कैपिटल करते हैं। अन्य सभी चर नामों में कम से कम एक लोअरकेस अक्षर होना चाहिए। यह सम्मेलन गलती से पर्यावरण और आंतरिक चर को ओवरराइड करने से बचता है।
क्रिस डाउन

@ क्रिस नीचे - कन्वेंशन मैंने देखा है कि मेरे पूरे करियर को सेट करके अलग-अलग किया गया है: लोअरकेस, अपर केस और कैमलकेस :)
वॉरेन

कैमलकेस और लोअरकेस ठीक हैं। किसी भी तरह से, वैरिएबल जो पर्यावरण वैरिएबल नहीं हैं, पूरे अपरकेस में नहीं होने चाहिए।
क्रिस डाउन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.