/ / sed लाइनों से मेल नहीं खाता है जो '#' से शुरू होते हैं यदि रिक्त स्थान या टैब इससे पहले हैं - regex, bash, sed

sed लाइनों से मेल नहीं खाता है जो '#' से शुरू होते हैं यदि रिक्त स्थान या टैब इससे पहले हैं - regex, bash, sed

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

sed "/^#|^$/d" httpd.conf

लेकिन यह अभी भी कुछ रेखाएं दिखाता है यदि उनके पास उस चरित्र से पहले रिक्त स्थान या टैब है।

क्या इसमें कोई फिक्स है? यदि संभव हो तो मैं अजीब या किसी अन्य उपकरण के बजाय sed का उपयोग करना चाहूंगा।

उत्तर:

जवाब के लिए 3 № 1

जोड़ना [ t]* वैकल्पिक रूप से रिक्त स्थान और टैब से मिलान करने के लिए रेगेक्स पर।

sed "/^[ t]*#|^[ t]*$/d" httpd.conf

या, पुनरावृत्ति से बचने के लिए कोष्ठक का उपयोग करना:

sed "/^[ t]*(#|$)/d" httpd.conf

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

sed "/^[[:space:]]*[#$]/d" httpd.conf मेरे लिये कार्य करता है।

$ cat httpd.conf
TEST1
# test2
# test3
TESTkkk
$ Another comment
$ Another comment2
# Another comment
# Another comment with tab

$ sed "/^[[:space:]]*[#$]/d" httpd.conf
TEST1
TESTkkk

वह अभिव्यक्ति कहती है कि अगर पहले चरित्र, किसी भी स्थान के बाद, सेट से वर्णों में से एक है #$, तो हटाएं (d) आउटपुट से वह लाइन।

अद्यतन करें: [[:space:]] टैब के लिए भी मेरे लिए काम किया, हालांकि वैकल्पिक, पर आधारित https://superuser.com/a/786423/44976 है:

sed "/^[ t]*[#$]/d" httpd.conf

इन दोनों अभिव्यक्तियों को ओएसएक्स पर निम्न संस्करण पर परीक्षण किया गया था:

sed (GNU sed) 4.2.2 Copyright (C) 2012 Free Software Foundation, Inc.