संभावित असंगत इनपुट से निपटने के दौरान, मैं इसे चलाने से पहले दृश्य निरीक्षण के लिए लाइन द्वारा पूरी नौकरी को 'वर्तनी से बाहर' देखना पसंद करता हूं (विशेषकर जब यह लोगों के मेलबॉक्स को साफ करने जैसा कुछ विनाशकारी हो)।
तो मैं जो कुछ भी करता हूं, वह मापदंडों की एक सूची उत्पन्न करता है (जैसे। उपयोगकर्ता नाम), इसे एक-एक-रिकॉर्ड-प्रति-पंक्ति फैशन की फ़ाइल में फ़ीड करें, जैसे:
johndoe
jamessmith
janebrown
तब मैं सूची को खोलता हूं vim
, और इसे खोज के साथ जोड़ देता हूं और अभिव्यक्तियों को बदल देता हूं जब तक कि मुझे पूर्ण आदेशों की एक सूची न मिल जाए, जिन्हें निष्पादित करने की आवश्यकता है:
/bin/rm -fr /home/johndoe
/bin/rm -fr /home/jamessmith
इस तरह अगर आपका रेगेक्स अधूरा है, तो आप देखेंगे कि किस कमांड में संभावित समस्याएं होंगी (यानी। /bin/rm -fr johnnyo connor
)। इस तरह से आप अपने रेगेक्स को पूर्ववत कर सकते हैं, और इसे फिर से इसके अधिक विश्वसनीय संस्करण के साथ आज़मा सकते हैं। इसके लिए नेम मैनरिंग बदनाम है, क्योंकि वान गाग, ओ'कॉनर्स, सेंट क्लेयर, स्मिथ-वेसन जैसे सभी किनारे मामलों की देखभाल करना मुश्किल है।
इसमें ऐसा करने के set hlsearch
लिए उपयोगी है vim
, क्योंकि यह सभी मैचों को उजागर करेगा, इसलिए आप आसानी से स्पॉट कर सकते हैं यदि यह मेल नहीं खाता है, या अनपेक्षित तरीके से मेल खाता है।
एक बार जब आपका रेगेक्स परिपूर्ण होता है और यह उन सभी मामलों को पकड़ लेता है, जिनके बारे में आप सोच सकते हैं / सोच सकते हैं, तो मैं इसे आमतौर पर एक सेड अभिव्यक्ति में बदल देता हूं, ताकि यह दूसरे रन के लिए पूरी तरह से स्वचालित हो सके।
ऐसे मामलों के लिए जहां इनपुट की लाइनों की संख्या आपको एक दृश्य निरीक्षण करने से रोकती है, मैं अत्यधिक कमांड को स्क्रीन पर निष्पादित करने की सलाह देता हूं (या बेहतर अभी तक, एक लॉग) इसे निष्पादित करने से पहले, इसलिए यदि यह गलत हो जाता है, तो आप वास्तव में जानते हैं कि किस कमांड के कारण हुआ असफल होना। फिर आप अपने मूल रेगेक्स पर वापस जा सकते हैं और एक बार फिर समायोजित कर सकते हैं।
printf "foo bar\nbaz bat" | xargs echo whee
उपज देगाwhee foo bar baz bat
। शायद-L
या-n
विकल्प जोड़ सकते हैं?