दो विशिष्ट तारों के बीच का पाठ हटाना


10

मेरे पास नीचे के रूप में एक फाइल है:

mime PI Name: ISHO SUCCESS RATE RT, Value: 95.663826
scr  PI Name: RRC Access Failures due to UU, Value: 0.13394141
prog PI Name: RRC Access Failures due to UU, Value: 0.16077702
sch PI Name: RRC Access Failures due to UU, Value: 0.11781933

मैं पाठ PIतक निकालना चाहता हूं Value:। मैंने कोशिश की

sed '/<PI>/,/<\/Value:>/d' 

कोई मदद?

जवाबों:



6

dकमांड का उपयोग करने sedसे पूरी लाइन हट जाएगी। इसके अलावा, मुझे यकीन है कि तुम क्यों प्रयोग कर रहे हैं नहीं कर रहा हूँ <और >। शायद आप उनके साथ भ्रमित कर रहे हैं \<और \>यह grepशब्द सीमाओं को निरूपित करने के लिए उपयोग करता है? उस मामले में, आपको पता होना चाहिए कि sedका उपयोग करता है \bशब्द सीमाओं के दोनों प्रकार के लिए (शुरुआत और अंत)। तो आप कुछ इस तरह लिख सकते हैं:

sed -i 's/\bPI\b.*\bValue:\b//' your_file

अतिरिक्त मजबूती के लिए, मैं perlआलसी मात्रा का उपयोग करूंगा .ताकि आप केवल पहली घटना PIऔर पहली घटना के बीच के पाठ को हटा दें Value:। बेशक यह सब आपके उपयोग के मामले पर निर्भर करता है।

perl -pi -e 's{ \b PI \b .*? \b Value: \b}{}x' your_file

1

पैटर्न के बीच कई लाइनों को हटाने के लिए इस कोड का उपयोग करें (पैटर्न सहित लाइनें):

sed "/PI/,/Value:/d" your_file

यदि आप सीधे अपने_ को संशोधित करना चाहते हैं:

sed -i "/PI/,/Value:/d" your_file

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