সেডে বিন্দু (।) প্রতিস্থাপন করা হচ্ছে


9

সুতরাং আসল প্রশ্নটি হল - M-BM-অন্য চরিত্রগুলি হারাতে ঝুঁকি না নিয়ে বিশেষ চরিত্রটি কীভাবে সরিয়ে ফেলা যায় সে সম্পর্কে কারও কি ধারণা আছে ?

আমার কাছে পাঠ্যের একটি স্ট্রিং রয়েছে:

" . . ."

এটাই

space dot space dot space dot

আমি এই স্ট্রিংয়ের সমস্ত উপস্থিতি টেক্সট ফাইলে প্রতিস্থাপন করার চেষ্টা করছি

"..."

এটাই

dot dot dot

আমি সেড দিয়ে করার চেষ্টা করছিলাম:

sed -r 's:\s\.\s\.\s\.:...:g' -i sed-dots

দুর্ভাগ্যক্রমে, এটি কিছুটা হলেও ইনপুট ফাইল পরিবর্তন করে না। ফাইল: https://www.rodbox.com/s/46zmiruy3ln85a1/sed-dots

আমি যখন পাঠ্য সম্পাদকে একই স্ট্রিং প্রতিস্থাপন করার চেষ্টা করি (আমি জিন ব্যবহার করি) এটি সঠিকভাবে পাওয়া যায় এবং প্রতিস্থাপন করা হয়।

আমি কেবল কারণ হিসাবে ভাবতে পারি তা হ'ল those স্থানগুলির কিছু (বা সমস্ত) সত্যই ফাঁকা স্থান নয়, তবে কিছু বিশেষ চরিত্র।

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

cat -Aমাইফাইল ব্যবহার করার পরে মনে হচ্ছে সমস্যাটি যে এই স্পেসগুলি ফাঁকা নয়, M-BM-বিশেষ চরিত্রের। .অনুসন্ধানের জন্য প্রস্তাবিত কোনও প্রতীক ব্যবহার করা ভাল ধারণা নয় কারণ ঝুঁকি রয়েছে এমন কিছু অন্যান্য অক্ষর মুছে ফেলা হবে।

উত্তর:


10

প্রথমে আমি একটি সত্যিকারের ফাইল ব্যবহার না করে টেস্ট করে echoপাইপ দিয়ে শুরু করব sed। দ্বিতীয়ত, আপনি {n}বহুগুণ এবং সীমা বোঝাতে প্রসারিত রেজেক্স মডেলটিতে একটি ব্যবহার করতে পারেন ।

আপনি সেখানে বেশিরভাগই ছিলেন তবে আপনার রেজেক্স একটি শীর্ষস্থানীয় স্থানের প্রত্যাশা করেছিল।

$ echo 'cheese . . . muffins' | sed -r 's/(\s?\.){3}/ dot dot dot/g'
cheese dot dot dot muffins

নোটটি \s?আউটপুট নষ্ট করার জন্য এখনও যথেষ্ট লোভী, সুতরাং আমি আউটপুটটিতে একটি স্থান যুক্ত করেছি। আপনি এটি নাও চাইতে পারেন। আমি স্থানটি optionচ্ছিকও করেছি, সুতরাং এটি নীচের সমস্তটির সাথে মিলবে:

...
. ..
.. .
. . .
 . . . 

কেবল alচ্ছিক ?পতাকা সরান ।


ইউনিকোডের সাথে আপনার সমস্যা (মন্তব্যগুলিতে) দেওয়া আপনি ডেটাটিকে তার ASCII সমতুল্যতার সাথে জোর করতে পারেন iconvএবং তারপরে সেড করতে পারেন:

$ iconv -f utf-8 -t ascii//translit sed-dots | sed -r 's/(\s?\.){3}/ dot dot dot/g'
Lorem ipsum dot dot dot
Some dot dot dot more text

আমি অবাক হয়েছি যে আপনি echoকোনও ফাইল ক্যাটিংয়ের পরিবর্তে ব্যবহার করার পরামর্শ দিয়েছেন, কমপক্ষে আপনি যখন কোনও ফাইলটি ক্যাট করেন, তখন আপনি জানেন যে শেলটি কোনও ব্যাখ্যা দিচ্ছে না, এবং উভয়ই প্রতিধ্বনি নয়।
ফ্লিম

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

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

1
@ রাফাল আপনি যদি তাকান তবে cat -A sed-dotsদেখতে পাবেন যে বিন্দুগুলির মধ্যে "স্পেস" বিশেষ M-BM- চরিত্রগুলি ... তারা কীভাবে সেখানে প্রবেশ করেছিল তা নিশ্চিত নয় তবে তাদের প্রতিস্থাপনের প্রয়োজন রয়েছে। আপনি যদি তাদের লক্ষ্যবস্তু করতে না পারেন তবে এটি কাজ করে: sed -r 's/(\s\..\..\.)/ dot dot dot/ig' sed-dots
অলি

@ অলি এটি কাজ করে। আপনাকে অনেক ধন্যবাদ! আপনি সিনট্যাক্স ব্যাখ্যা করতে পারেন? আপনি কি নিশ্চিত যে এর কোনও পার্শ্ব-প্রতিক্রিয়া নেই এবং অন্য কিছু প্রতিস্থাপন করবে না? আমি যতদূর দেখতে পাচ্ছি, এই রেজিএক্সপস বিন্দু পরে কোনও চরিত্রের সাথে মিলবে। তবে এম-বিএম একটি চরিত্র নয়, এটি তিনটি। তাহলে এটি কীভাবে সম্ভব কাজ করতে পারে?
রাফাল

0

সমস্ত "।" থেকে "প্রতিস্থাপন করতে নীচের চেষ্টা করুন।

sed -r 's/\. /\./g' -i sed-dots

না হইলে ". . ." প্রতি "..."

sed -r 's/\. \. \./\.\.\./g' -i sed-dots

0

আমি যখন আপনার ফাইলটি চালাচ্ছিলাম তখন আমি এটি ব্যবহার করতে পারি:

tr '\240' ' ' < sed-dots.txt > sed-dots.new

এটি কোনও রূপান্তর পদক্ষেপ ছাড়াই কাজ করেছে:

sed 's/[[:blank:]]\.[[:blank:]]\.[[:blank:]]\./.../g' sed-dots.txt

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