মোরটিলস থেকে স্পঞ্জ - শেল পুনর্নির্দেশের পার্থক্য কী? দরকারী উদাহরণ?


16
> brew install moreutils                                                          
==> Downloading https://homebrew.bintray.com/bottles/moreutils-0.55.yosemite.bottle.tar.gz    
######################################################################## 100.0%               
==> Pouring moreutils0.55.yosemite.bottle.tar.gz       
🍺  /usr/local/Cellar/moreutils/0.55: 67 files, 740K   

স্পঞ্জ স্ট্যান্ডার্ড ইনপুট পড়ে এবং নির্দিষ্ট ফাইলে এটি লিখে দেয়। শেল পুনর্নির্দেশের বিপরীতে, স্পঞ্জ আউটপুট ফাইলটি লেখার আগে তার সমস্ত ইনপুট আপ করে তোলে। এটি পাইপলাইনগুলি নির্মাণের অনুমতি দেয় যা একই ফাইল থেকে পড়ে এবং লেখতে পারে।

আমি বুঝতে পারছি না। আমাকে কিছু দরকারী উদাহরণ দিন।

কি আপ soaks মানে?



অন্য একটি উদাহরণ expand foo.txt | sponge foo.txt। আরও দেখুন: stackoverflow.com/a/33639324/1959808
Ioannis Filippidis

tl; dr আউটপুট ফাইলটি কেটে spongeফেলার আগে তার ইনপুট "ভিজিয়ে" তুলেছে
বলপয়েন্টবেন

উত্তর:


33

মনে করুন আপনি নামের একটি ফাইল আছে inputআপনার সাথে সব লাইন শুরু সরাতে চান #মধ্যে input। আপনি সমস্ত লাইনগুলি #ব্যবহার করে শুরু না করে পেতে পারেন :

grep -v '^#' input

তবে আপনি কীভাবে পরিবর্তন করবেন input? স্ট্যান্ডার্ড POSIX টুলসেষ্টের সাহায্যে আপনার একটি অস্থায়ী ফাইল ব্যবহার করা দরকার, এর মতো কিছু:

grep -v '^#' input >/tmp/input.tmp
mv /tmp/input.tmp ./input

শেল পুনর্নির্দেশ সহ:

grep -v '^#' input >input

inputআপনি এটি পড়ার আগে কেটে যাবে।

সহ sponge, আপনি পারবেন:

grep -v '^#' input | sponge input

4
<>অপারেটরটি ব্যবহার করে আপনি বাইটগুলি কেবল রূপান্তরিত করা অবধি নিরাপদে একই সময়ে ফাইল পড়তে এবং লিখতে পারেন ।
ক্রিস ডাউন

@ ক্রিসডাউন: হ্যাঁ, আমার অর্থ এটি এটিকে সঙ্কুচিত না করেই হবে
কিউংলম

"এটিকে দূষিত করা" সম্পর্কে আপনার অর্থ কী তা আমি নিশ্চিত নই। এর বিপরীতে >এবং <, <>ফাইলটি দূষিত করে না যদি না কিছু সত্যই ভুল হয়ে যায়। এটি ব্যবহার করে আপনি সহজেই বাইট লিখে লিখতে পারেন। উদাহরণস্বরূপ, এটি দিয়ে চেষ্টা করুন tr
ক্রিস ডাউন

@ ক্রিসডাউন: বিভ্রান্তি এড়ানোর জন্য আমাকে সেই বাক্যটি সরান। আমি আসলে ব্যবহার করার সময় বলতে চাইছি <>fileআপনি পড়া এবং লেখার জন্য ফাইল খুলুন তবে আপনি আসলে ফাইল করার জন্য কিছুই লিখেন না।
কিউংলম

1
আমি মনে করি @ ক্রিসডাউন যে পয়েন্টটি তৈরি করার চেষ্টা করছে তা হ'ল এটি <>কোনও ফাইল কেটে ফেলবে না, তবে কেবলমাত্র এটির বিদ্যমান বাইটগুলি নতুন আউটপুট দ্বারা প্রতিস্থাপন করবে। যদি নতুন আউটপুট খুব সংক্ষিপ্ত হয় তবে আপনার ফাইলটির শেষে বাঁচবে আবর্জনা। তবে যদি নতুন আউটপুট যথেষ্ট দীর্ঘ হয় তবে কোনও ঝুঁকি নেই।
বলপয়েন্টবেন

8

Moreutils হোম পেজে নিজেই একটি টিপিক্যাল ব্যবহারের ক্ষেত্রে দস্তাবেজ:

sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd

এখানে, / etc / passwd উভয়ই লিখিত এবং পাঠানো হচ্ছে, এবং এটি পরিবর্তন করা হচ্ছে। লেখার আগে স্টিডিনকে না বাড়িয়ে, / ইত্যাদি / পাসডব্লিউডটি দুর্নীতিগ্রস্থ হতে পারে (পড়ার সময় ফাইলটি পরিবর্তিত হয়েছিল)।


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