bash - सीएडी एक्सप्रेशन में प्रतिस्थापन स्ट्रिंग में '\' वर्ण से बचें



string sed (4)

मैं जैसे पाठ की एक पंक्ति लेने की कोशिश कर रहा हूं

    13) Check for orphaned Path entries

और इसे बदलने के लिए (मैं आउटपुट रंगाई करने के लिए बाश रंग कोड चाहता हूं, स्क्रीन पर प्रदर्शित नहीं करना)

\033[32m*\033[0m Check for orphaned Path entries

बाश रंग कोड के साथ तारांकन को रंगीन बनाने के लिए इसे और अधिक खड़े करना। मेरे पास एक सीएडी कमांड है, जो कि ज्यादातर करता है, सिवाय इसके कि वह रंग कोड को सही ढंग से नहीं संभालता क्योंकि यह प्रतिस्थापन पाठ के संदर्भ के रूप में उन्हें देखता है

मैंने अभी तक क्या किया है:

sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"

जो निम्नलिखित आउटपुट का उत्पादन करता है, जब मैंने शुरुआत में दिए स्ट्रिंग पर चलाया था:

   13) Check for orphaned Path entries33[32m*  13) Check for orphaned Path entries33[0m Check for orphaned Path entries

यह \ 033 का \ 0 ले रहा है और इसे मूल स्ट्रिंग के साथ बदल रहा है। प्रतिस्थापन स्ट्रिंग में बैकस्लैश दोहराकर कोई फर्क नहीं पड़ता; मुझे अभी भी एक ही आउटपुट पाठ मिलता है

मैं सैश प्रतिस्थापन अभिव्यक्ति में बाश रंग कैसे बच सकता हूं?

https://src-bin.com


Answer #1

इसे इस्तेमाल करे :

sed  "s/ *13) \(.*\)/ \\\\033 \1/"

अर्थात् स्लैश-स्लैश-स्लैश-स्लैश -033


Answer #2

प्रतिस्थापन स्ट्रिंग में बैकस्लैश दोहराएं, और सीएएस एक्सप्रेशन के आसपास डबल कोट्स के बजाय एकल का उपयोग करें:

sed 's/ *13) \(.*\)/ \\033[32m*\\033[0m \1/'

यह शेल को sed व्यवहार से हस्तक्षेप करने से रोकता है।

~~~~~~~

अद्यतन करें:

रंग को साफ रूप से प्राप्त करने के लिए एक स्क्रिप्ट का उपयोग करें:

colorize.sh

#!/bin/sh

HIGHLIGHT=`echo -e '\033[32m'`
NORMAL=`echo -e '\033[0m'`

sed "s/ *13) \(.*\)/ $HIGHLIGHT*$NORMAL \1/" yourinputtext

Answer #3

आपका '\ 033' वास्तव में एक एकल ESC (एस्केप) चरित्र है, इसे आउटपुट करने के लिए आप निम्न में से किसी एक का उपयोग कर सकते हैं:

  • \o033
  • \d027
  • \x1B
  • \c[ लिए CTRL-[

Answer #4

मुझे एक ही समस्या थी और मैंने इस तरह से हल किया।

आप अपना कोड बदलने का प्रयास कर सकते हैं:

sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"

इस मामले में:

sed "s/ *13) \(.*\)/ $(echo '\033[32m')*$(echo '\033[0m') \1/"

एस्केप कमांड को प्रिंट करने के लिए मूलभूत विचार 'गूंज' का उपयोग करना है। यह मेरे लिए काम किया है,





escaping