regex - Add/Insert lines before pattern such that lines to be added have part of the pattern in uppercase -


मुझे क्लास घोषणापत्र से पहले संकलक डायरेक्टिव्स को जोड़ना है:

  `ifndef MIPI_RFFE_SCOREBOARD__SV` परिभाषित करें MIPI_RFFE_SCOREBOARD__SV वर्ग mipi_rffe_scoreboard uvm_scoreboard फैली;  

मैंने कोशिश की:

  sed 's / class (\ w +) (। *) / \ \ Ifndef \ u \ 1__SV \ 2 /' mipi_rffe_scoreboard .sv  

जो देता है:

  sed: -e अभिव्यक्ति # 1, चार 38: अवैध संदर्भ \ 2 पर `s 'कमांड के आरएचएस  

मैंने देखा है कमल के जवाब में केवल समस्या का एक हिस्सा ही निकलता है क्योंकि मुझे "mipi_rffe_scoreboard" पर कब्जा करने की आवश्यकता है और इसे अपरकेस में बदलना

< P> आप अपनी फाइल पर यह पर्ल एक-लाइनर चला सकते हैं:

  perl -pe 's / (class (\ w +)) / `ifndef \ u $ 2 \ e__sv \ n' define \ यू $ 2 \ ई__ एस वी \ n \ n $ 1 / ' 

यह एक शब्द के बाद "वर्ग" वाले रेखाओं को कैप्चर करता है और दो पंक्तियों को तैयार करता है \ U का उपयोग रूपांतरण को समाप्त करने के लिए मैच को अपरकेस और \ E में बदलने के लिए किया जाता है।

इसे जांचना:

  $ perl -pe 's / (class (\ w +)) / `ifndef \ u $ 2 \ E__SV \ n' परिभाषित करें \ U $ 2 \ E__SV \ n \ n $ 1 / '& lt; & lt; & lt;" class mipi_rffe_scoreboard Uvm_scoreboard विस्तार; " `एन्डेफ एमआईपीआई_आरएफएफसीएससीएआरओएबोर्डडीएसवी` एमआईपीआई_आरएफएफसीएससीएआरएसओबीडीडीएसएसवी वर्ग को परिभाषित करता है एमआईपीआई_रफ़्फ़_कोरकोरबोर्ड यूवीएम_स्कॉर्टबोर्ड फैलाता है;  

वैकल्पिक रूप से (GNU sed पर परीक्षण किया गया है, मुझे पूर्ण विश्वास है कि यह अन्य संस्करणों पर काम नहीं करेगा):

  sed -r 's / वर्ग (\ w +) / `एन्डेफ \ यू \ 1 \ ई__ एस वी \ n` डिफाईन \ यू 1 एडी ई एस एस \ n \ n & amp; / ' 

-आर विस्तारित रेगेक्स मोड को सक्षम करता है, जो आपको पैटर्न पर कब्जा करने के लिए () का उपयोग करने की अनुमति देता है सामान्यतः, आपको \ (\)


Comments