মিলে না থাকা লাইনকে বাদ দিতে কীভাবে করবেন?


8

নিম্নলিখিত উদাহরণে, sedএকটি aবা ক দিয়ে শুরু হওয়া লাইনগুলি মেলে cএবং line রেখার প্রথম অক্ষরটি ( aবা c) মুদ্রণ করে :

$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'.

output:
a
bh
c
dj
ek
fl

যাইহোক, প্যাটার্নগুলির সাথে মেলে না এমন লাইনগুলিও মুদ্রিত হয়েছে। sedপ্যাটার্নের সাথে মেলে না এমন লাইনগুলি বাদ দিতে আমি কীভাবে বলব ? আমি এর সাথে একত্রিত হয়ে পছন্দসই প্রভাব অর্জন করতে পারি grep(নীচে) তবে আমি জানতে চাই sedযে এটি "নিজেই" অর্জন করতে পারে কিনা ।

$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'

output:
a
c

আপনি আসলে কী জানতে চেয়েছিলেন তাতে কিছু আসে যায় না, তবে আপনার প্যাটার্নটি শুরু হওয়া উচিত ^ সুতরাং এটি লাইনের শুরুতে নোঙ্গর করা। কোডেড হিসাবে, এটি শেষ অক্ষর না হওয়া অবধি লাইনের যে কোনও জায়গায় একটি বা সি এর সাথে মেলে।
জো

উত্তর:


12

no-printপতাকাটি ব্যবহার করুন ( -n) এবং সুস্পষ্টভাবে সফল বিকল্প কমান্ডগুলি মুদ্রণ করুন ( s///p):

 sed -n 's/\(a\|c\)./\1/p'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.