আপনি যদি শেষ 10 লাইন চান:
tail myFile.txt | tr '\n' '\0' | xargs -r0i myCmd {} arg1 arg2
তবে জিএনইউ দিয়ে xargs
আপনি ডিলিমিটারটিকে নতুন লাইনে সেট করতে পারেন:
tail myFile.txt | xargs -ri -d '\n' myCmd {} arg1 arg2
(এর -0
জন্য সংক্ষিপ্ত -d '\0'
)।
বহনযোগ্যভাবে, আপনি সহজেই প্রতিটি অক্ষর এড়াতে পারবেন:
tail myFile.txt | sed 's/./\\&/g' | xargs -I{} myCmd {} arg1 arg2
বা প্রতিটি লাইনের উদ্ধৃতি:
tail myFile.txt | sed 's/"/"\\""/g;s/.*/"&"/' | xargs -I{} myCmd {} arg1 arg2
আপনি যদি 10 টি সর্বশেষ এনইউল-বিস্মৃত রেকর্ডগুলি চান myFile.txt
(তবে তারপরে এটি কোনও পাঠ্য ফাইল হবে না), আপনাকে কল \n
করার \0
আগে এই রূপান্তর করতে tail
হবে যার অর্থ ফাইলটি পুরোপুরি পড়তে হবে:
tr '\n\0' '\0\n' < myFile.txt |
tail |
tr '\n\0' '\0\n' |
xargs -r0i myCmd {} arg1 arg2
সম্পাদনা করুন (যেহেতু তুমি বদলে tail
যাও tail -f
আপনার প্রশ্নের মধ্যে):
উপরের শেষটি অবশ্যই স্পষ্টভাবে বোঝায় না tail -f
।
xargs -d '\n'
এক কাজ করবে, কিন্তু অন্যান্য বেশী জন্য, আপনি একটি বাফার উপলব্ধ সমস্যা আছে। ভিতরে:
tail -f myFile.txt | tr '\n' '\0' | xargs -r0i myCmd {} arg1 arg2
tr
এটি যখন টার্মিনালে না যায় তখন তার আউটপুটটি বাফার করে (এখানে, একটি পাইপ)। IE, এটি লেখার জন্য কোনও বাফার পূর্ণ (8kiB এর মতো কিছু) জমা না করা পর্যন্ত এটি কিছুই লিখবে না। যার অর্থ myCmd
ব্যাচগুলিতে ডাকা হবে।
একটি গনুহ বা FreeBSD 'র সিস্টেম, আপনি এর বাফার উপলব্ধ আচরণ পরিবর্তন করতে পারেন tr
সঙ্গে stdbuf
কমান্ড প্রয়োগ করুন:
tail -f myFile.txt | stdbuf -o0 tr '\n' '\0' |
xargs -r0i myCmd {} arg1 arg2