একটি লাইনে কোনও প্যাটার্নের প্রথম উপস্থিতি প্রতিস্থাপন করা হয়েছে, সেড সহ কোনও ফাইলের সমস্ত লাইন


16

এটি কি এক লাইনে করে করা সম্ভব?

আমার এই মত একটি আউটপুট আছে:

"First line" - Description  
" Second line" - Description  
"Third line" - Description  
" Fourth line" - Description  

এই ইনপুটটি স্বয়ংক্রিয়ভাবে উত্পন্ন হয়।

আমি প্রতিটি লাইনের "(উদ্ধৃতি চিহ্ন + স্পেস) প্রথম সংলগ্ন (উদ্ধৃতি চিহ্ন) প্রতিস্থাপন করতে চাই "। যদি আমি প্রতিকল্পন বিশ্বব্যাপী প্রযোজ্য, এটি প্রতিটি সংঘটন পরিবর্তন করতে হবে line" -করতে line"-, যদি এই কাজ করা সম্ভব একটি sed এক মাছ ধরার নৌকা ব্যবহার করা সম্ভব তাই আমি হতাশ ছিল।

আমি ব্যবহার চেষ্টা করেছি ^ভালো

sed -r ':a;N;$!ba;s/(\^\" )/\"/g'

তবে এটি কাজ করছে না, এটি কোনও কিছুর প্রতিস্থাপন করে না। আমি চেষ্টা করেছিলাম

sed -r ':a;N;$!ba;s/(^|\" )/\"/g'

এবং এটি সমস্ত উপস্থিতি প্রতিস্থাপন করে। আমি সড ব্যবহার করতে শুরু করেছি, তাই আমি কিছু ভুল করছি কিনা তা আমি সত্যিই জানি না।

আমি এখানে কি মিস করছি?


লেবেল সম্পর্কে একটি নোট: আপনি উপরে যে কমান্ডটি লিখেছেন সেটি কিছু বাস্তবায়নে কাজ করতে পারে sedতবে বহনযোগ্যতা এবং সত্যই অদ্ভুত ত্রুটিগুলি এড়াতে আপনার একটি লেবেলের পরে প্রদত্ত কমান্ড যুক্তিটি শেষ করা উচিত (যদি আপনার এগুলির প্রয়োজন হয় তবে)। যেমন,sed -e ':a' -e 'N;$!ba' -e 'whatever'
ওয়াইল্ডকার্ড

উত্তর:


34

আপনি এটি overth سوچ করছি। sedডিফল্টরূপে একটি রেখায় কেবলমাত্র প্রথম উদাহরণটি প্রতিস্থাপন করে ( /gপরিবর্তক ছাড়াই ), যদিও আপনি এখনও অ্যাঙ্কার করতে চান কারণ আপনি ডন করেন না; লাইনটির প্রথমদিকে যেমন প্রথমটি চান তেমনটি চান না; এবং আপনার সাধারণত যে স্পষ্ট লাইন ক্রিয়াগুলি ব্যবহার করার চেষ্টা করছেন তা প্রয়োজন হয় না (কেন?)।

sed 's/^" /"/'

ধন্যবাদ! আমি ভেবেছিলাম কোনও ফাইলের সাথে কাজ করার সময় লাইন ক্রিয়াগুলি স্পষ্টভাবে ঘোষণা করা প্রয়োজন, এটি সম্পর্কে পড়া এবং কেবল সেগুলি ব্যবহার করা চালিয়ে যাওয়া প্রয়োজন। আমি সত্যিই এটি অত্যধিক চিন্তা করছিলাম, এটি সহজ হতে পারে না এবং এটি কৌশলটিও করতে পারে :)
স্টিভ বি।

এই কমান্ডগুলি বেশ অপ্রচলিত বলে আমি প্ররোচিত হই; তাদের সাথে বেশ জটিল বহু লাইনগুলি করা সম্ভব, তবে এটি করা সহজ নয় এবং আজকাল আপনি পার্ল / পাইথন / রুবি / তার পরিবর্তে যাই হোক না কেন ব্যবহার করা ভাল।
গাইকোসৌর

উপরের মন্তব্যটির সাথে সম্পূর্ণরূপে একমত নন; বহু-লাইন sedযেমন কমান্ড Nএবং এই ধরনের লেবেল হিসাবে :aএ সব অপ্রচলিত নয় এবং তারা হয় পোর্টেবল এবং POSIX নিদিষ্ট , পার্ল / পাইথন / রুবি অসদৃশ / যাই হোক না কেন। তবে এটি সত্য যে আপনি যদি নিজেকে প্রায়শই তাদের প্রয়োজন বোধ করেন তবে আপনার শেখাawk উচিত ।
ওয়াইল্ডকার্ড

2

আরও সাধারণ উত্তর, যেহেতু আমি গাইকোসরের উত্তর সম্পর্কে মন্তব্য করতে পারি না - আপনি the (লাইন অ্যাঙ্কারের শুরু) রাখবেন না। উদাহরণস্বরূপ, আপনি যদি এ এর ​​প্রথম উপস্থিতিটি বি এর সাথে প্রতিস্থাপন করতে চান তবে আপনার হবে

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