खाली फ़ाइल के रूप में स्टड और स्टडआउट के रूप में एक ही फ़ाइल का उपयोग करना


2

यदि किसी फ़ाइल को फ़िल्टर करना चाहते हैं, लेकिन अगर मैं उसी फ़ाइल का उपयोग करता हूँ जैसे इनपुट और आउटपुट आउटपुट फ़ाइल खाली है। क्या दूसरी फ़ाइल का उपयोग करने के बजाय एक और समाधान है?

php -r "echo preg_replace('~/\* DEV \*/(.*)/\* ENDDEV \*/~si', '', file_get_contents('php://stdin'));" < build/index.php > build/index.php

एक आधार के रूप में फ़ाइल का उपयोग करें, फिर एक नया बनाएं, मूल हटाएं और नया नाम बदलें एक विकल्प मैं नहीं मान रहा हूं। यह एक बैकअप आधार के रूप में भी उपयोगी हो सकता है, क्योंकि आप एक संवेदनशील फ़ाइल (एक अनुक्रमणिका) का संपादन कर रहे हैं
लोरेंजो वॉन मैटरहॉर्न

इसका निश्चित रूप से एक विकल्प है, लेकिन एक और, क्लीनर तरीका होना चाहिए।
बॉब

2
मुझे पूरा यकीन है कि वास्तव में कोई क्लीनर रास्ता नहीं है, क्योंकि यहां तक ​​कि 'एडिट इन प्लेस' विकल्प के साथ प्रोग्राम, जैसे sed, वास्तव में अस्थायी फाइलें और फिर ओवरराइट करना।
evilsoup

जवाबों:


6

जब आप किसी फ़ाइल को लिखने के लिए खोलते हैं >, तो उसे पढ़ने से पहले ही काट दिया जाता है। इसलिए यह खाली है।

एक अस्थायी फ़ाइल के साथ वैकल्पिक (हाँ, यह काफी सामान्य है):

php -r "…" < build/index.php > tmp
mv tmp build/index.php

आदर्श रूप से, mktempएक अद्वितीय अस्थायी फ़ाइल बनाने के लिए उपयोग करें:

tmp="$(mktemp /tmp/file.XXX)"
php -r "…" < build/index.php > "$tmp"
mv "$tmp" build/index.php

लेकिन यह वास्तव में कम या अधिक संक्षिप्त नहीं है।


मेरी व्यक्तिगत पसंदीदा moreutilssponge से उपयोगिता है - यह इनपुट पढ़ता है और फिर फ़ाइल में लिखता है:

php -r "…" < build/index.php | sponge build/index.php

या, बेहतर अभी तक, PHP में प्रतिस्थापन न करें, लेकिन एक उपकरण जो इन-प्लेस संपादन का समर्थन करता है, जैसे पर्ल के साथ:

perl -pi -e '…' build/index.php

इसी प्रकार sed, यहाँ GNU के लिए इन-फ्लैग झंडा है sed:

sed -i -e '…' build/index.php

और बीएसडी के लिए sed, आपको इसके लिए एक स्पष्ट खाली तर्क चाहिए -i:

sed -i '' -e '…' build/index.php

आपको संभवतः पर्ल और सेड के सिंटैक्स के लिए अपनी नियमित अभिव्यक्ति / प्रतिस्थापन कमांड को क्रमशः अनुकूलित करना होगा।


या अगर इसका -iविकल्प हो तो sed करें ।
बॉबी

शायद mktempअस्थायी फ़ाइल के लिए उपयोग करना चाहिए ।
डैनियल बेक

@ डैनियल ऑफ कोर्स - ने कहा कि। ओपी हालांकि कुछ "साफ" चाहता था, इसलिए मैं और भी अधिक कोड को शामिल करने में संकोच कर रहा था जब वास्तविक समाधान सिर्फ उचित उपकरण का उपयोग करना है, उदाहरण के लिए।
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.