sed मैच पैटर्न N बार


14

मैं एक फाइल को 2 शब्दों के साथ विखंडू में विभाजित करना चाहता हूं।

$cat tmp
word1 word2 word3 word4 word5 word6 word7
$sed -e 's/word. word. /&\n/g' tmp
word1 word2 
word3 word4 
word5 word6 
word7
$sed -e 's/word. \{2\}/&\n/g' tmp
word1 word2 word3 word4 word5 word6 word7

मुझे अंतिम आदेश की उम्मीद थी कि इसके पहले जैसा परिणाम दिया जाएगा। गलत क्या है?

जवाबों:


17

क्षमा करें, ऐसा लगता है जैसे मैंने इसे पोस्ट करने के बाद ही समझ लिया।

इसे होना चाहिए

sed -e 's/\(word. \)\{2\}/&\n/g' tmp

जाहिरा तौर पर कोष्ठकों को {2}पूरे पैटर्न पर स्थिति को लागू करने की अनुमति देने की आवश्यकता होती है word.और न केवल पूर्ववर्ती स्थान।


3
या उपयोगsed -E 's/(word. ){2}/&\n/g' tmp
साइरस


1

N के मिलान के सामान्य मामले के लिए:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.