জিএনইউ গ্রেপ-পি এর সাথে পার্ল সামঞ্জস্যপূর্ণ রেজেক্স ব্যবহার করা


10

আমি এই রেজেক্সটি (?<=\[')[^,]*নীচের লাইনযুক্ত কোনও ফাইলে ব্যবহার করছিdisk = ['OVS/sdasd/asdasd/asdasd/something.img, w']

আমি ফিরে আসতে চাই OVS/sdasd/asdasd/asdasd/something.img

আমি এটি ব্যবহার grepকরতে কীভাবে ব্যবহার করব ?

আমি চেষ্টা করেছি grep -P "(?<=\[')[^,]*"কিন্তু এটি পুরো লাইনটি ফেরত দেয়।

উত্তর:


14

যোগ -oসুইচ যাতে grepশুধুমাত্র আয় কি প্যাটার্ন তোমার জন্য grepping করছি মেলে:

$ grep -Po "(?<=\[')[^,]*" data.txt 
OVS/sdasd/asdasd/asdasd/something.img

6

আপনি sedবৃহত্তর বহনযোগ্যতার জন্য তাত্পর্যপূর্ণ দৃser়তা ছাড়াই ব্যবহার করতে পারেন ( -oআপনার জন্য উপলব্ধ নাও হতে পারে grep):

sed "s!['\(\[^,\]*\),.*\$!\1!;t;d;p" data.txt

ব্যাকস্ল্যাশ এর "অদ্ভুত" ব্যবহারটি এখানে পালিয়ে গেছে তা নোট করুন। এটি sedডিফল্টরূপে BREs ব্যবহার করার কারণে ঘটে ( এই প্রশ্নটি দেখুন )।

বহনযোগ্যতার কথা বললে, কেন শুধু পার্ল ব্যবহার করবেন না?

perl -nle "print \$1 if /\['([^,]*)/" data.txt

2

@ এসএলএম ইতিমধ্যে আপনাকে ক্যানোনিকাল উত্তর দিয়েছে। এখানে আরও কয়েকটি বিকল্প রয়েছে:

ফিল্ড ডিলিমিটার ব্যবহার করুন awkএবং '(সমস্ত লাইনের একই ফর্ম্যাট রয়েছে বলে ধরে নেওয়া):

$ awk -F "'" '($1~/ = /){print $2}'
OVS/sdasd/asdasd/asdasd/something.img, w    

পুরো কাজটি পারল করে নিন:

$ perl -lne 'print $1 if /\[.(.*?).\]/' data.txt 
OVS/sdasd/asdasd/asdasd/something.img, w    

একটি সহজ রেজেেক্স ব্যবহার করুন এবং ফলাফলগুলি বিশ্লেষণ করুন:

$ grep "\[.*\]" data.txt | awk -F "'" '{print $2}'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep -o "\[.*\]" data.txt | perl -pe "s/[\[\]']//g"
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | sed 's/.*\[.\(.*\).\]/\1/'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | perl -pne 's/.*\[.(.*?).\].*/$1/'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | perl -lne 'print $1 if /\[.(.*?).\]/'
OVS/sdasd/asdasd/asdasd/something.img, w
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.