দুটি বন্ধনী মধ্যে স্ট্রিং মুদ্রণ করুন


14

আমি এই লাইন ফাইল আছে

G8 = P(G1,G3)
G9 = P(G3,G4)
G12 = P(G2,G9)
G15 = P(G9,G5)
G16 = P(G8,G12)
G17 = P(G12,G15)

আমি যেমন আউটপুট প্রয়োজন

G1,G3
G3,G4
.....

আমি সেড / গ্রেপ কমান্ড বা পার্ল ব্যবহার করে কীভাবে এটি করতে পারি?

উত্তর:


18

আরও কয়েকটি উপায়:

  • sed

    sed 's/.*(\(.*\))/\1/' file 
  • Perl

    perl -pe 's/.*\((.*)\)/$1/' file 

    অথবা

    perl -lanF"[()]" -e 'print $F[1]' file 

    অথবা

    perl -pe 's/.*\((.+?)\).*/$1/;' file 
  • awk

    awk -F"[()]" '{print $2}' file 
  • খোল

    while IFS="()" read a b; do echo "$b"; done < file 

কীভাবে অজস্র পদ্ধতিটি কাজ করে সে সম্পর্কে আপনি কি আরও বলতে চান ?, এটি খুব সহজে মনে রাখা সহজ
satch_boogie

1
@Satch_boogie দের -Fসাহায্যে আপনি কোন চরিত্র (গুলি) ব্যবহার করতে পারবেন তা লাইনগুলি ক্ষেত্রগুলিতে বিভক্ত করতে ব্যবহার করবে। এখানে, আমি এটি []বন্ধনীর খোলার এবং বন্ধ হওয়ার সমন্বয়ে একটি অক্ষর শ্রেণি ( ) দিচ্ছি । সুতরাং এটি লাইনটি বিভক্ত করবে (এবং চালিয়ে যাবে )। ফলস্বরূপ, ২ য় ক্ষেত্রটি প্রথম বন্ধনীগুলির সামগ্রী হবে। যেমন, স্ট্রিং সঙ্গে G8 = P(G1,G3)foo, $1হতে হবে G8 = P, $2হতে হবে G1,G3এবং $3হবে foo
টেরডন

7

এটি করার একাধিক উপায় রয়েছে:

perl -nle 'print $1 if /\((.*)\)/' file

বা:

awk 'NR > 1 {print $1}' RS='(' FS=')' file

5
grep -oP '\(\K[^)]+' file

এটি খোলার প্রথম বন্ধনী সন্ধান করে, এটিকে উপেক্ষা করে, তারপরে অনুসরণ করা সমস্ত নন-ক্লোজ-প্রথম বন্ধনী মুদ্রণ করে।

GNU গ্রেপ প্রয়োজন


5

sed 's/^.*(//;s/)$//' /path/to/file

এটি ভেঙে ফেলার জন্য:

sedহয় stream editor। 's/^.*(//;s/)$//'স্ক্রিপ্টটি কি পাঠানো হচ্ছে sed, যা নিম্নলিখিত হিসাবে ভেঙে যায়:

s/^.*(//    substitute nothing for the beginning of any line (`^`) followed by anything up until an open-paren (`(`)
s/)$//      substitute nothing for a close-paren (`)`) followed immediately by the end of a line

1

একটি সাধারণ কাটা সমাধান:

$ বিড়াল পরীক্ষা01 | কাট-ডি "(" -f2 | কাট-ডি ")" -f1


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.