কোলনের আগে সমস্ত অক্ষর প্রতিস্থাপন করতে শেড কীভাবে ব্যবহার করবেন?


25

আমি কীভাবে নিম্নলিখিত স্ট্রিং প্রতিস্থাপন করব

hd_ma_prod_customer_ro:*:123456789:john.doe

john.doe সহ

মূলত আমাকে শেষ কোলনটি খুঁজে বের করতে হবে (:) এবং এর আগে এবং এটি সহ সমস্ত কিছু মুছতে হবে।

উত্তর:


40

আপনার প্রকৃত অর্থ যা ধরে নিচ্ছেন তা হ'ল আপনি সর্বশেষ কোলন পর্যন্ত সমস্ত কিছু মুছতে এবং john.doeঅক্ষত রেখে যেতে চান :

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
  sed 's/.*://'

ব্যাখ্যা:

প্রথম লাইন sedউদাহরণস্বরূপ পরীক্ষার স্ট্রিংটিকে কেবল পাইপ দেয় ।

দ্বিতীয়টি একটি মৌলিক sedপ্রতিস্থাপন । প্রথম এবং দ্বিতীয়টির মধ্যবর্তী অংশটি /অনুসন্ধান করার জন্য রেজেক্স এবং দ্বিতীয় এবং তৃতীয়টির মধ্যবর্তী অংশটি এটির সাথে প্রতিস্থাপন করবে (আমরা মুছে ফেলার সাথে এই ক্ষেত্রে কিছুই নেই)।

রেজেক্সের জন্য, যে .কোনও চরিত্রের সাথে মেলে, *এটি যেকোন সংখ্যক (শূন্য সহ) পুনরাবৃত্তি করে এবং :কোলনের সাথে মেলে। সুতরাং কার্যকরভাবে এটি কোনও কোলন অনুসরণ করে। যেহেতু .*একটি কোলন অন্তর্ভুক্ত করতে পারে, তাই ম্যাচটি 'লোভী' এবং শেষ কোলনের সমস্ত কিছু অন্তর্ভুক্ত।


7
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'

আমি সমস্ত ঘটনাকে প্রতিস্থাপন করছি : একটি ট্যাব দিয়ে এবং তারপরে awkjohn.doe স্ট্রিংটি বের করার জন্য ব্যবহার করছি।

আপনার কাছে ফাইল না থাকলে আপনি এটি চেষ্টা করে দেখতে পারেন।

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | 
awk -F'\t' '{print $4}'

গ্রামের মন্তব্য অনুসারে আমরা নীচের মত চলকটি awkব্যবহার করে একা সর্বশেষ কলামটি মুদ্রণ করতে পারি ।NFawk

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'

অপ্রয়োজনীয়তা থেকে মুক্তি পেতে গ্রিমের মন্তব্যগুলিকে অন্তর্ভুক্ত করা sed

কমান্ডটি নীচের মত পরিবর্তন করা যেতে পারে।

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'

1
আপনি যদি ব্যবহার করতে যাচ্ছেন awk, তবে কেন শুধু করবেন না awk -F:?
গ্রিম

@ গ্রায়েম, আমি এখনও তাতে স্বাচ্ছন্দ্য বোধ করি না awk। মূলত, আমি যে উত্তরগুলি আমার উত্তর পেয়েছিলাম তা পরীক্ষার চেষ্টা করি এবং ব্যবহারকারীর প্রয়োজনীয়তা অনুসারে সেগুলি সংশোধন করার চেষ্টা করি। :)
রমেশ

3
-Fজন্য বিকল্প awkনির্দিষ্ট করে ক্ষেত্র বিভাজক। আপনি যদি awkকোলন ব্যবহার করতে বলেন, ট্যাবগুলি দিয়ে কলোনগুলি প্রতিস্থাপন করার দরকার নেই। এছাড়াও, আপনি যদি সর্বশেষ ক্ষেত্রটি পেতে চান তবে $NFপরিবর্তে ব্যবহার করতে পারেন $4, যদি সর্বদা 3 টি কলোন না থাকে তবে এটি কাজ করবে।
গ্রিম

@ গ্রামীম, আপনি যে পরিবর্তনগুলি উল্লেখ করেছেন তা আমি অন্তর্ভুক্ত করেছি। দয়া করে আমাকে
রমেশ

হ্যাঁ, পুরোপুরি কাজ করে!
গ্রিম


2

চেষ্টা করুন

সম্পাদনা: সরানো অ্যাঙ্কর

echo 'abc:fjk' |sed 's/.*:/john.doe/g'

এবং মুছতে

echo 'abc:fjk' |sed 's/.*://g'

ওপি যা
চাইছে

প্রশ্নটি আবার পড়ুন।
আকাশ

আচ্ছা আপনি আমার মন্তব্যের পরে মুছে ফেলুন, কিছু মনে করবেন না
ইরুবার

আচ্ছা বুঝলাম . আমার ক্ষমা 1_CR
আকাশ

1
^নোঙ্গর পারেন প্রশ্ন মামলার অথবা আপনার উদাহরণ ক্ষেত্রে কোনো পার্থক্য করে তোলে। শুরু কোনো ঠিকানা /.*ইতিমধ্যে বোঝা ^
মাইকেসার্ভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.