URL के साथ sed का उपयोग करके पुनरावर्ती खोज-बदलें


3

मेरे पास फ़ाइलों का एक बड़ा सेट है जिसमें मुझे एक पूर्ण URL योजना बदलने की आवश्यकता है। कुछ फ़ाइल नामों में स्थान होते हैं। बहुत खोज और परीक्षण और त्रुटि के बाद, यह मेरे पास आया निकटतम है:

find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +

परिणामी फ़ाइल में स्कीम है http: हटाया जा रहा है // - यानी '//www.domain.com'

इसके अतिरिक्त, एक नई फ़ाइल बनाई गई है, जिसमें संलग्न है -e फ़ाइल नाम के लिए। - अर्थात। some file.php-e जो स्पष्ट रूप से अवांछित है।

जबकि यह निश्चित रूप से (हटाने के बाद) पर्याप्त होगा *-e फाइलें, मुझ में ओसीडी वास्तव में जानना चाहता है कि यह कैसे सही ढंग से करना है। नोट: मैं एक मैक पर स्थानीय रूप से काम कर रहा हूं, लेकिन यह लिनक्स पर भी प्रदर्शन करेगा।

किसी भी विचार का बहुत आभार माना जाएगा!

जवाबों:


2

समाधान 1 : एक तरीका उपयोग करना है find साथ में xargs:

find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'

समाधान २ : एक अन्य का उपयोग करना होगा find साथ में -exec, आपके प्रश्न के समान है:

find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +

दोनों समाधान कहेंगे sed तर्कों के रूप में कई फ़ाइलों के साथ। इसलिए sed हर फ़ाइल के लिए एक बार नहीं बुलाया जाता है, लेकिन फ़ाइलों के हर सेट के लिए।

समाधान 3 : के बजाय sed, आप भी उपयोग कर सकते हैं perl खोज-प्रतिस्थापन-नौकरी के लिए:

perl -i -pe 's#http://domain.com#https://www.domain.com#g' file

के साथ संयुक्त find / xargs आदेश:

find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'

दुर्भाग्य से पहले दो त्रुटि के साथ: command c expects \ followed by text। अंतिम एक विशिष्ट फ़ाइल पर काम करता है लेकिन मैं इसे पुनरावृत्ति (फ़ाइलनाम / डायरियों में संभावित रिक्त स्थान को ध्यान में रखते हुए) कैसे करता हूं?
Chris Chapman

@ क्रिसचंपमैन बस इसे / xargs कमांड के साथ मिलाएं: find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'
chaos

डिंग डिंग डिंग! - हमें विजेता मिल गया! अनेक अनेक धन्यवाद। पर्ल एक जेली बार भी तेज था।
Chris Chapman
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.