मैंने sed का उपयोग करके html टैग हटाने के तरीकों को देखा है। मैं इस धागे पर आया:

sed या इसी तरह के html टैग हटाएं

उपयोगकर्ता "बेकार कोड" ने निम्नलिखित पंक्ति का सुझाव दिया:

sed 's/<[^>]\+>//g'

चूंकि मैं स्टैक ओवरफ्लो के लिए नौसिखिया हूं और इसलिए अभी तक उत्तरों पर टिप्पणी करने की अनुमति नहीं है, इसलिए मैं आपको उपरोक्त कमांड लाइन के टूटने के लिए पूछने के लिए यह धागा बना रहा हूं। मुझे पता है कि कोड में "एस" और "जी" क्या करते हैं, लेकिन वह मध्य भाग, <[^>]\+> विशेष रूप से, मुझे थोड़ा भ्रमित करता है।

अग्रिम में धन्यवाद!

0
Two-Tu 15 जून 2018, 23:30

1 उत्तर

सबसे बढ़िया उत्तर

[xyz] का अर्थ है कोई भी वर्ण x, y, या z.
[^xyz] इसके विपरीत है, अर्थात x, y, या z के अलावा कोई भी वर्ण अन्य है।
तो [^>] का मतलब > के अलावा कोई भी कैरेक्टर है।

रेगुलर एक्सप्रेशन में किसी भी चीज़ के बाद + का अर्थ है "इनमें से एक या अधिक"। तो [^>]+ का अर्थ एक या अधिक वर्ण हैं जो > नहीं हैं।

अंत में, <[^>]+> का अर्थ है < जिसके बाद एक या अधिक वर्ण हैं जो > नहीं हैं, उसके बाद > हैं। तो मूल रूप से <anything>

रेगुलर एक्सप्रेशन के खोज पैटर्न की शुरुआत और अंत को चिह्नित करने के लिए यह सब / वर्णों के बीच रखा गया है। दूसरे और तीसरे / के बीच का हिस्सा वह है जो किसी भी पाए गए मैच को बदला जाना है। जो इस मामले में एक खाली स्ट्रिंग है क्योंकि आप सिर्फ टैग हटाना चाहते हैं।

+ से पहले का बैकस्लैश इसलिए है क्योंकि sed डिफ़ॉल्ट रूप से नियमित अभिव्यक्तियों के सीमित संस्करण का उपयोग करता है, आप sed -E का उपयोग करके भी इसे दूर कर सकते हैं।

तो sed -E 's/<[^>]+>//g' (बैकस्लैश की अनुपस्थिति पर ध्यान दें) भी काम करेगा।

नोट: आप सोच सकते हैं कि क्या <> को भी हटाना होगा। कड़ाई से यह एक मान्य HTML टैग नहीं है, लेकिन अगर यह वैसे भी दिखाई देता है, तो आप शायद इससे भी छुटकारा पाना चाहेंगे। तो + के बजाय आप * का उपयोग कर सकते हैं जिसका अर्थ है शून्य या अधिक पूर्ववर्ती वर्ण (+ के बजाय जिसका अर्थ एक या अधिक है)।

1
RocketNuts 15 जून 2018, 23:52