sed

2012-05-15 12 views
7

शुद्ध रूप से शैक्षिक के साथ एक पंक्ति में डुप्लिकेट शब्द निकालें, लेकिन यह मुझे निराशाजनक है।sed

there there are are multiple lexical errors in this line line 

एसईडी का उपयोग कर:

मैं इस पाठ को सही करना चाहते हैं। मुझे यह अब तक मिल गया है:

sed 's/\([a-z][a-z]*[ ,\n][ ,\n]*\)\1/\1/g' < file.text 

यह अंतिम दोगुनी शब्दों को छोड़कर सबकुछ सुधारता है!

there are multiple lexical errors in this line line 

क्या एक गुरु गुरु कृपया बता सकते हैं कि उपरोक्त शब्दों को अंत में क्यों नहीं सौदा किया जाता है?

+0

N.B. आरई - '[, \ n] 'sed' \ n' को लाइन डिलीमीटर के रूप में उपयोग करता है। इसलिए जब तक आप पैटर्न स्पेस में '\ n'' डालेंगे, तब तक आप पैटर्न स्पेस में एक पंक्ति पढ़ने के बाद कभी सामना नहीं करेंगे। – potong

उत्तर

10

ऐसा इसलिए है क्योंकि अंतिम मामले में (line) आपकी रेगेक्स मेमोरी 1 में line (एक स्थान के बाद लाइन) होगी और आप इसकी पुनरावृत्ति की खोज कर रहे हैं। चूंकि अंतिम line के बाद कोई स्थान नहीं है, इसलिए मैच विफल हो जाता है।

इस समाप्त होने के शब्द line के बाद एक जगह जोड़ ठीक करने के लिए।

वैकल्पिक रूप से आप रेगुलर एक्सप्रेशन को बदल सकते हैं:

sed -e 's/\b\([a-z]\+\)[ ,\n]\1/\1/g' 

See it