এটি বেশিরভাগ ক্ষেত্রে অফ-টপিক, তবে আপনি ব্যবহার করতে পারেন
find -maxdepth 1 -type f -name '*.txt' | xargs python -c '
import fileinput
for line in fileinput.input(inplace=True):
print line.replace("blah", "blee"),
'
এখানে মূল উপকারটি (ওভার ... xargs ... -I {} ... sed ...
) গতি হ'ল: আপনি sed
১ কোটি বার আহ্বান করা এড়াবেন । এটি দ্রুততর হবে যদি আপনি পাইথন ব্যবহার করা এড়াতে পারেন (যেহেতু পাইথন ধীর ধরণের, তুলনামূলকভাবে), তাই এই কাজের জন্য পার্ল আরও ভাল পছন্দ হতে পারে। পার্ল দিয়ে কীভাবে সমতুল্য সুবিধে করা যায় তা আমি নিশ্চিত নই।
এটি যেভাবে কাজ করে তা হ'ল xargs
পাইথনকে যতটা যুক্তি যুক্ত হয় যা এটি একটি একক কমান্ড লাইনে ফিট করতে পারে এবং ততক্ষণ ততক্ষণ তা চালিয়ে যাবেন যতক্ষণ না এটি আর্গুমেন্টের বাইরে চলে যায় (যা সরবরাহ করা হচ্ছে ls -f *.txt
)। প্রতিটি অনুরোধে আর্গুমেন্টের সংখ্যা ফাইলের দৈর্ঘ্যের উপর নির্ভর করবে এবং, কিছু অন্যান্য স্টাফ। fileinput.input
ফাংশন প্রতিটি আবাহন এর আর্গুমেন্ট নাম ফাইল থেকে ধারাবাহিক লাইন উৎপাদ, এবংinplace
বিকল্প যে এটি জাদুর "ধরা" আউটপুট এবং এটি ব্যবহার প্রতিটি লাইনে প্রতিস্থাপন করতে বলে।
দ্রষ্টব্য যে পাইথনের স্ট্রিং replace
পদ্ধতিটি রিজেক্সস ব্যবহার করে না; আপনার যদি এগুলির দরকার হয় তবে আপনার import re
ব্যবহার ও ব্যবহার করতে হবে print re.sub(line, "blah", "blee")
। এগুলি হ'ল পার্ল-সামঞ্জস্যপূর্ণ রেজিএক্সপস, যা আপনি পেয়ে যাচ্ছেন তার ভারী মজবুত সংস্করণ sed -r
।
সম্পাদন করা
আকিরা মন্তব্যে যেমন উল্লেখ করেছেন, কমান্ডের ls -f *.txt
জায়গায় একটি find
গ্লোব ( ) ব্যবহার করে আসল সংস্করণটি কাজ করবে না কারণ গ্লোবগুলি bash
নিজেই শেল ( ) দ্বারা প্রক্রিয়াজাত হয় । এর অর্থ হ'ল কমান্ডটি চালানোর আগে, 10 মিলিয়ন ফাইলের নাম কমান্ড লাইনে প্রতিস্থাপন করা হবে। এটি একটি কমান্ডের আর্গুমেন্ট তালিকার সর্বাধিক আকার ছাড়িয়ে যাওয়ার গ্যারান্টিযুক্ত। আপনি এটিতে xargs --show-limits
সিস্টেম-নির্দিষ্ট তথ্যের জন্য ব্যবহার করতে পারেন ।
আর্গুমেন্ট তালিকার সর্বাধিক আকারটিও আমলে নেওয়া হয় xargs
, যা সেই সীমা অনুসারে অজগরটির প্রতিটি অনুরোধে যে আর্গুমেন্টগুলি পাস করে তা সীমাবদ্ধ করে। যেহেতু xargs
এখনও বেশ কয়েকবার অজগরকে ডাকতে os.path.walk
হবে, ফাইল তালিকা পেতে আকিরের পরামর্শটি আপনাকে সম্ভবত কিছুটা সময় সাশ্রয় করবে।
sed
প্রতিটি ফাইলের জন্য অনুরোধ করা এড়াতে পারেন তবে এটি আরও দ্রুত হবে। আমি নিশ্চিত নই যে এখানে ফাইলগুলির একটি সিরিজ খোলার, সম্পাদনা করার, সংরক্ষণ করার এবং বন্ধ করার কোনও উপায় আছে কিনাsed
; যদি গতি অপরিহার্য হয় তবে আপনি একটি আলাদা প্রোগ্রাম, সম্ভবত পার্ল বা পাইথন ব্যবহার করতে চাইতে পারেন।