শেড ব্যবহার করে কোলনের প্রথম উপস্থিতি পর্যন্ত মুছুন


16

আমার সিড কমান্ডটি হ'ল,

 sed '/(.*:)/d' <<< 'abcd:bcde:cdeaf'

এটি অবশ্যই ফিরে আসবে,

bcde:cdeaf

(অর্থাত্) লাইনের প্রথম কোলনের আগে সমস্ত অক্ষর এবং নিজেই কোলনটি সরিয়ে ফেলতে হবে।

কিন্তু এটি কিছুই অপসারণ করছে না।

আমার বিভ্রান্তি মূলত কারণে দেখা দেয়,

1) প্যাটার্ন মিলের জন্য পেরেনগুলি কি সেজেড-রেসেক্স-এস-এর ভিতরে এড়াতে হবে?

2) উভয় ক্ষেত্রে (পালিয়ে যাওয়া / কোনও এস্কেপিংয়ের সাথে), এটি এনটিআর কাজ করছে। আমি চেষ্টা করেছিলাম,

sed -E '/\\(.*:\\)/d' <<< 'abcd:bcde'
sed 

1
যদি আপনি চান sed 's/[^:]*://'। এবং আপনি dইনপুট লাইনটি একত্রিত করছেন না , উপায় দ্বারা, আপনি একটি s///ubstistance কমান্ড দিয়ে এটি পরিবর্তন করছেন । আপনাকে প্রথমে কোলন বিট এবং কোলনকে এটিকে কোনও কিছু ছাড়াই প্রতিস্থাপন করতে হবে।
মাইকজার্ভ

এটি সমাধান করে ... ধন্যবাদ, মানুষ ... এটি একটি উদাহরণ যা আমি

3
বা, কেবল বাশ ব্যবহার করে: printf "%s\n" "${line#*:}"...
জেসনওয়ারিয়ান

1
@ জেসনওয়ারিয়ান - উদাহরণের উত্স বিবেচনা করে ভাল বক্তব্য। এটি অবশ্যই এটি পরিচালনা করার আরও কার্যকর উপায়। তবে এটি যদি while read lineপায় তবে $lineসম্ভবত sedপছন্দ করা উচিত।
মাইকজার্ভ

উত্তর:


23
$ echo 'abcd:bcde:cdeaf' | sed 's/^[^:]*://g'
bcde:cdeaf

প্রথমটির ^অর্থ রেখার শুরু। [^:]শুধু একমাত্র উপায় আমি জানি লিখতে হয় না কোলন*কোলন পরে মানে কোন অধিকার আমার সামনে কিছু সংখ্যা (এই ঘটনা না-কোলন মধ্যে)। অবশেষে,: কোলন নির্বাচন করে।

অন্য কথায়, লাইনের শুরুটি নির্বাচন করুন, যে কোনও সংখ্যা কোলন নয় এবং প্রথম কোলন নয়।

//gমানে যে মিলেছে উদাহরণস্বরূপ মুছে দিন।


3
^আপনার ম্যাচটি নোঙ্গর করার দরকার নেই, কারণ আপনি একটি gলোবল পতাকাও যুক্ত করেছেন except কোনও প্যাটার্নের কেবল প্রথম একমাত্র ঘটনা ঘটতে পারে এবং তাই gলোবাল পতাকাটি কোনও [^:]*:লাইন থেকে সমস্ত নিদর্শন সরিয়ে দেয় না , যেমনটি আপনি ^এটি নোঙ্গর না করলে এটি করবে। দুটি অপ্রয়োজনীয় পতাকা যা কেবল একে অপরকে ভারসাম্য বজায় রাখার জন্য রেজেক্সকে জটিল করার পরিবর্তে আপনি কেবল এগুলি ছেড়ে দিতে পারেন, এটি যা উত্তোলনের আগে এই উত্তরের সম্পাদিত সংস্করণটি প্রদর্শিত হয়েছিল। আমি কেন জানি না যে খারাপ তথ্য ছড়িয়ে দিতে জোর দিয়েছি, তবে এটি একটি খারাপ উত্তর দেয় makes
মাইকজার্ভ

@ মাইকজার্ভ, যেমনটি আমি ইতিমধ্যে বলেছি, এটি নির্দেশ করার জন্য ধন্যবাদ। আমার sedদক্ষতা বাড়াতে আমাকে সহায়তা করার জন্য আমি আন্তরিকভাবে তার প্রশংসা করি । আমি এ পর্যন্ত নতুন sedএবং আমি এখনও অবধি গ্রহণ করা খুব সীমিত সিনট্যাক্স থেকে ভ্রান্তিতে আরামদায়ক নই। এটি sed(হেই), আমি মনে করি আমার উত্তরটি ওপি-র সমস্যার সমাধান করবে যদিও এটি অনুকূল (যেমন আপনার) উত্তর নয়। এটি স্ট্যাক এক্সচেঞ্জ, উইকিপিডিয়া নয়, তাই আমি ভুল হলে আমাকে সংশোধন করুন তবে আপনি যদি আরও ভাল উত্তর সম্পর্কে জানেন তবে আপনার এটি পোস্ট করা উচিত যাতে লোকেরা বিভিন্ন পদ্ধতির বিভিন্ন দেখতে এবং তাদের তুলনা করতে পারে। সম্পাদনা ফাংশন দিয়ে দয়া করে আমার উত্তরটি আপনার উত্তরে পরিণত করবেন না ।
ব্যবহারকারী 1717828

4
এটা আমার উত্তর ছিল না। এটি আপনার উত্তর ছিল, সম্পাদিত। এখানেই শেষ. এবং এটা ভাল ছিল । এটা আর হয় না।
মাইকজার্ভ

4

কলামগুলি পরিচালনা করতে এখানে রয়েছে cut:

echo 'abcd:bcde:cdeaf' | cut -d: -f2-

একই কাজ

echo 'abcd:bcde:cdeaf' | cut -d: -f1 --complement

এবং অন্যান্য সংস্করণ sed(বড় ডেটার জন্য আরও দ্রুত) সহ:

echo 'abcd:bcde:cdeaf' | sed 's/^://;t;s/:/\n:/;D'

এবং বরং বিদেশী bash

echo 'abcd:bcde:cdeaf' | { IFS=: read -r first last ; echo "$last" ; }

অথবা

echo 'abcd:bcde:cdeaf' | { read -r line ; echo ${line#*:} ; }

অথবা

echo 'abcd:bcde:cdeaf' | { IFS=: read -a a ; printf '%b:' "${a[@]:1}\c" ; echo ;}

আপনি sed 's/[^:]*://'
সেড

@ ডন_ক্রিসটি সংস্করণটি উপরের উত্তরে উল্লেখ করা হয়েছে। অতিরিক্তভাবে রেজপ্যাক্স ব্যবহারের কারণে এটি প্রতিটি ধীরে ধীরে কমপ্রায়েন্স সংক্ষেপিত করতে ধীর হয়।
কোস্টাস

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