आप GNU awk
है, तो आप नियंत्रण में भी बहुत कुछ कर सकते हैं। इसके लिए आपको match(source,/regex/,array)
निर्माण की आवश्यकता होगी।
उदाहरण: परीक्षण के लिए
नमूना इनपुट:
echo "$x"
p1=aaa,p2=bb,p3=cc,p4=dd,p5=ee,p6=ff,p7=gg,p8=hh,p9=ii,p10=jj
sed
ठीक काम करता है \9
तक:
echo $x |sed -r 's/p1=([^,]+).*p2=([^,]+).*p3=([^,]+).*p4=([^,]+).*p5=([^,]+).*p6=([^,]+).*p7=([^,]+).*p8=([^,]+).*p9=([^,]+)(.*)/\1 \2 \3 \4 \5 \6 \7 \8 \9/'
aaa bb cc dd ee ff gg hh ii
sed
तोड़ दिया जब \10
जोड़ा जाता है, यह माना जाता है \1
+ 0
है।
echo $x |sed -r 's/p1=([^,]+).*p2=([^,]+).*p3=([^,]+).*p4=([^,]+).*p5=([^,]+).*p6=([^,]+).*p7=([^,]+).*p8=([^,]+).*p9=([^,]+).*p10=([^,]+)(.*)/\1 \2 \3 \4 \5 \6 \7 \8 \9 \10/'
aaa bb cc dd ee ff gg hh ii aaa0
awk
बचाव के लिए जब 9 से अधिक जोड़ा गया कोई भी संदर्भ संदर्भ जोड़ा गया है। यहां 10 वें रिफ्रेंस जोड़ा गया है:
echo "$x" |awk '{match($0,/p1=([^,]+).*p2=([^,]+).*p3=([^,]+).*p4=([^,]+).*p5=([^,]+).*p6=([^,]+).*p7=([^,]+).*p8=([^,]+).*p9=([^,]+).*p10=([^,]+)(.*)/,a);print a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10]}'
aaa bb cc dd ee ff gg hh ii jj
आप किसी भी स्क्रिप्टिंग भाषा का उपयोग कर सकते हैं जो आपको इसके लिए एक-लाइनर लिखने देता है। 'perl -pe '/ yourregexhere/$ 1 $ 2 $ 3 $ 4 $ 5 $ 6 $ 7 $ 8 $ 9 $ 10 /'' –
यह काफी संभव है कि आप एक सरल रेगेक्स का उपयोग कर सकें जिसके लिए कई बैक्रेरेंस की आवश्यकता नहीं है। यदि आप कुछ नमूना डेटा और इच्छित आउटपुट का एक उदाहरण दिखाते हैं, तो हम शायद आपको एक आसान तरीका दिखा सकते हैं। –
'awk' के लिए नौकरी की तरह लगता है - फ़ील्ड 10' $ 10' –