বিড়াল, গ্রেপ, পুনর্নির্দেশ আউটপুট… ফাঁকা ফাইল?


8

আমি শুধু দৌড়ে গেলাম

cat /opt/webapplications/Word/readme.log | grep -v 'Apple'

এবং আমি যে ক্লাইকে প্রত্যাশা করছিলাম সেটিতে আউটপুট পেয়েছিলাম, যা এতে সমস্ত লাইন readme.logছিল না Apple... '...

পরবর্তী আমি দৌড়ে ...

cat /opt/webapplications/Word/readme.log | grep -v 'Apple' > /opt/webapplications/Word/readme.log

তবে, /opt/webapplications/Word/readme.logফাঁকা।

কেউ আমাকে ব্যাখ্যা করতে পারে কেন এটি ঘটেছে, বা আমার সঠিক উপায়টি এই সম্পর্কে যাওয়া উচিত ছিল?



1
আপনি একই ফাইলটি পড়তে এবং লেখার চেষ্টা করছেন এবং বাশ প্রক্রিয়া পুনর্নির্দেশকে প্রথমে (ডান থেকে বামে)
আআআআআআআআআআআআআআআআআআআআআআআ আআর সাথে সাথে মনিকা

উত্তর:


14

এটি ঘটেছিল কারণ প্রথম কাজটি >হ'ল যে ফাইলটি এটি লিখতে চায় তা তৈরি করা - এবং যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে এর সামগ্রীগুলি মুছে ফেলা হবে। (এছাড়াও, catআপনার স্টেটমেন্টে ব্যবহার করার কোনও দরকার নেই যেহেতু grepকেবল এসটিডিনে নয় ফাইলগুলিতে কাজ করা))

এটি করার সঠিক উপায় হ'ল অস্থায়ী ফাইলটি পড়তে বা লিখতে লিখতে। তাই হয়

cp /opt/webapplications/Word/readme.log /tmp/readme.log
grep -v 'Apple' /tmp/readme.log > /opt/webapplications/Word/readme.log

অথবা

grep -v 'Apple' /opt/webapplications/Word/readme.log > /tmp/readme.log
mv /tmp/readme.log /opt/webapplications/Word/readme.log

কাজ করবে


1

একই ফাইলে ( >) পুনর্নির্দেশ করার সময় শেলটি catআদেশটি সঞ্চারিত হওয়ার আগে এবং ইনপুটটি পড়ার আগে ফাইলটি তৈরি করতে বা ছাঁটাতে পারে (দেখুন: "বাছাই করুন ফাইল ফাইল> ফাইল 1" কেন কাজ করে না? ) আপনি যদি ফাইলটি ফিল্টার করতে চান তবে আউটপুটটিকে বিভিন্ন ফাইলে পুনর্নির্দেশ করা ভাল বা পুনঃনির্দেশ এড়ানো মোটেই ভাল example উদাহরণস্বরূপ:

grep -v 'Apple' readme.log | tee readme.log

আরও ভাল এবং নিরাপদ উপায় হল জায়গাটিতে সম্পাদকদের ব্যবহার করা যা এই ধরণের অপারেশনের জন্য নকশাকৃত eg

sed -i '.bak' '/Apple/d' readme.log

বা ব্যবহার ex(ভিমের অংশ):

ex +g/Apple/d -cwq readme.log

সম্পর্কিত:

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