/ / उपयोगकर्ता परिभाषित मैकोज़ - मैकोज़, टर्मिनल, grep के साथ एक निश्चित वाक्यांश के सभी उदाहरणों को बदलें

उपयोगकर्ता परिभाषित मैकोज़ - मैकोज़, टर्मिनल, grep के साथ एक निश्चित वाक्यांश के सभी उदाहरणों को बदलें

मेरे पास विभिन्न स्थैतिक .html फ़ाइलों का संग्रह है। मैं वर्तमान फ़ोल्डर में सभी .html फ़ाइलों को फिर से देखना चाहता हूं और:

उपयोगकर्ता स्ट्रिंग के साथ image.jpg के सभी उदाहरणों को प्रतिस्थापित करें।

किसी अन्य उपयोगकर्ता स्ट्रिंग के साथ टेक्स्टब्लॉक 1 के सभी उदाहरणों को प्रतिस्थापित करें।

किसी तीसरे उपयोगकर्ता स्ट्रिंग के साथ टेक्स्टब्लॉक 2 के सभी उदाहरणों को प्रतिस्थापित करें।

जहां image.jpg / textBlock1 / textBlock2 केवल वही हैं जिन्हें बिल्कुल लिखित रूप में देखा गया है। tExtblock1 नहीं

टर्मिनल का उपयोग करके मैं इसे कैसे पूरा करूं? एक ताजा मैकोज़ इंस्टॉल पर काम करना चाहिए।

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

उत्तर:

उत्तर № 1 के लिए 1

यह छोटा bash लिपि चाहिए जैसा आप चाहते हैं। इसे के रूप में सहेजें modhtml और इसे निष्पादन योग्य बनाते हैं, केवल एक बार आवश्यक है:

chmod +x modhtml

और फिर आप इसे साथ चला सकते हैं:

./modhtml

यहां लिपि है:

#!/bin/bash
echo -n "Enter string1: "
read str1
echo -n "Enter string2: "
read str2
echo -n "Enter string3: "
read str3
echo DEBUG: str1=$str1
echo DEBUG: str2=$str2
echo DEBUG: str3=$str3
# Find all files (not directories), in the current directory and below...
# ... called "*.html" and, for each one, execute "sed" to change...
# ... image.jpg to str1
# ... textBlock1 to str2
# ... textBlock2 to str3
find . -type f -name *.html -print -exec sed -e "s/image.jpg/$str1/g" -e "s/textBlock1/$str2/g" -e "s/textBlock2/$str3/g" {} ;

जैसा कि यह खड़ा है, यह आपको उन फ़ाइलों के नाम बताता है जो यह बदलेगा और वे बाद में कैसे देखेंगे लेकिन वास्तव में कुछ भी नहीं बदलते हैं।

यदि यह अच्छा लग रहा है - अपनी फ़ाइलों की प्रतिलिपि पहले बनाएं, तो अंतिम पंक्ति को बदलकर इसे वास्तविक के लिए चलाएं:

find . -type f -name *.html -exec sed -i.bak -e "s/image.jpg/$str1/g" -e "s/textBlock1/$str2/g" -e "s/textBlock2/$str3/g" {} ;

यदि आप टर्मिनल की बजाय जीयूआई-स्टाइल प्रॉम्प्ट के माध्यम से स्ट्रिंग के लिए संकेत देना चाहते हैं, तो इस तरह की पहली कुछ पंक्तियों को प्रतिस्थापित करें:

#!/bin/bash
str1=$(osascript -e "Tell application "System Events" to display dialog "Enter string1:" default answer """ -e "text returned of result" 2>/dev/null)
str2=$(osascript -e "Tell application "System Events" to display dialog "Enter string2:" default answer """ -e "text returned of result" 2>/dev/null)
str3=$(osascript -e "Tell application "System Events" to display dialog "Enter string3:" default answer """ -e "text returned of result" 2>/dev/null)
echo DEBUG: str1=$str1
echo DEBUG: str2=$str2
echo DEBUG: str3=$str3

यह इस तरह दिखेगा:

यहां छवि विवरण दर्ज करें