शेल में एक पैरामीटर में <या> कैसे बचना है?


10

मैं उपयोग करना चाहते हैं grepएक PCRE अभिव्यक्ति है कि शामिल है के साथ <चरित्र। बैश को लगता है कि मैं पुनर्निर्देशित करना चाहता हूं, लेकिन मैं नहीं करना चाहता। मैं कैसे बच सकता हूं <?

जवाबों:


11

मैं इसे बैकस्लैश के साथ करने में सक्षम था:

25 % grep \< xmospos.c
#include        <stdio.h>
#include        <stdlib.h>
#include        <getopt.h>
#include        <X11/Xlib.h>

कम-से-कम उद्धृत किया गया, और एक उद्धृत, दोनों ने नासमझ जवाबों की तुलना में कम वापस ले लिया।


5
हां, या इसे एकल उद्धरण में रखें
ग्लेन जैकमैन

मुझे अभी भी सीखने की ज़रूरत है, उदाहरण के लिए कि वास्तव में भागने के साथ कैसे काम करता है: grep -oP '(?< )(.*)$'उदाहरण के लिए एकल उद्धरण के साथ काम नहीं करता है। पहले तो कोशिश की।
हक्रे

@hakre आपके regexp में एक वाक्यविन्यास त्रुटि प्रतीत होती है। क्या आपका मतलब था (?<! )(.*)$या (?<= )(.*)$?
गाइल्स का SO- बुराई पर रोक '

4

दो सरल नियम:

  • एक बैकस्लैश \Cअगले चरित्र से बच जाता है, चाहे वह कोई भी हो, एक न्यूलाइन के अलावा।
  • एकल उद्धरण 'text'उनके बीच किसी भी वर्ण से बचते हैं, जिसमें एक बैकस्लैश भी शामिल है, लेकिन एक भी उद्धरण शामिल नहीं है (क्योंकि यह उद्धरण पाठ के अंत को चिह्नित करता है)।

इस प्रकार:

grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile

यदि आपको एक तर्क पारित करने की आवश्यकता है जिसमें एकल उद्धरण शामिल हैं, तो आप '\''एकल उद्धरण के अंदर एक एकल उद्धरण "बच" का उपयोग कर सकते हैं । तकनीकी रूप से, यह क्या करता है पहला शाब्दिक पाठ समाप्त होता है, फिर एक 'ही शब्द में एक शाब्दिक शब्द, फिर एक ही शब्द में अधिक शाब्दिक पाठ।

grep '^D'\''oh!' myfile

शेष उद्धृत नियम (संक्षेप में):

  • आपको निम्न वर्णों को कम से कम कुछ बार उद्धृत करने की आवश्यकता है: व्हाट्सएप और !"#$&'()*;<>?[\]^`{|}~(दूसरे शब्दों में, निम्नलिखित वर्ण सुरक्षित हैं: अक्षर, अंक %+,-./:=@_और गैर-एएससीआईआई अक्षर)।
  • दोहरे उद्धरण चिह्नों के बीच, सभी वर्णों को शाब्दिक रूप से उपयोग किया जाता है "$\`और (इतिहास सक्षम के साथ गोले में) !। दोहरे उद्धरण चिह्नों के बीच एक बैकस्लैश स्ट्रिंग में दिखाई देगा जब तक कि यह गैर-शाब्दिक वर्णों में से एक से पहले न हो।

ये नियम बैश और अन्य बॉर्न-शैली के गोले (जैसे राख और क्श) के लिए हैं। वे zsh पर भी लागू होते हैं (सिवाय इसके कि व्हाट्सएप को =उद्धृत करने की आवश्यकता हो सकती है)। Csh / tsh और मछली में नियम अलग-अलग हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.