2009-11-08 21 views
5

मैं निम्नलिखित के रूप में परिवर्तित करने के लिए कोशिश कर रहा हूँ:मैं पर्ल में एक सशर्त प्रतिस्थापन कैसे कर सकता हूं?

bool foo(int a, unsigned short b) 
{ 
    return pImpl->foo(int a, unsigned short b); 
} 

रहे हैं:

bool foo(int a, unsigned short b) 
{ 
    return pImpl->foo(a, b); 
} 

दूसरे शब्दों में, मैं लाइनों जो समारोह परिभाषा नहीं हैं पर प्रकार परिभाषा को दूर करने की जरूरत है।

मैं लिनक्स का उपयोग कर रहा हूं।

perl -p -e 's/(?<=[,(])\s*?(\w+)*.*?(\w*)(?=[,)])/ $2/g;' fileName.cpp 

मैं कैसे लाइन 'वापसी' और अभी भी साथ शुरुआत पर केवल जगह ले सकता है ही पंक्ति में कई परिवर्तन करें:

निम्नलिखित दोनों लाइनों पर प्रकार को हटा?

उत्तर

8

एक if बयान जोड़े

perl -p -e 'next unless /^\s*return/; s/add/replacement/g;' filename.cpp 
+0

आह-भिन्न हो सकती है! धन्यवाद। – user204884

+2

चेतावनियों को देखना अच्छा होता है, यहां तक ​​कि ऑनलाइनर में भी, इसलिए एक -w (या बंडल के रूप में -Wpe) जोड़ें। – ysth

0

आप अपने रेगेक्स में मिलान करने के लिए कुछ डाल सकते हैं - इसलिए यह फ़ंक्शन परिभाषा से मेल नहीं खाता है। यहां तक ​​कि बेहतर एक स्क्रिप्ट लिखना होगा जो रेखा से रेखा को पार करता है और प्रतिस्थापन करने से पहले -> बिना लाइनों को अस्वीकार करता है। वैकल्पिक रूप से

perl -p -e 's/regex/replacement/g if /^\s*return/;' fileName.cpp 

, तो आप उपयोग कर सकते हैं कि स्ट्रिंग आप -p पर्ल के पास एक पाश की एक संस्था है:

+0

मैं तो करने की जरूरत नहीं हैं प्रतिस्थापन में पुनर्मूल्यांकन के लिए सभी क्षेत्रों को याद रखें? – user204884

+0

क्या ऐसा करना मुश्किल है? –

+0

फ़ंक्शन में पैरामीटर की संख्या निश्चित रूप से – user204884

संबंधित मुद्दे