উত্তর:
নিম্নলিখিত চেষ্টা করুন:
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
আপনি যদি চারটি স্থান চান, চেষ্টা করুন:
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
's/\t/ /g'
প্রতি লাইনে একাধিক ট্যাব প্রতিস্থাপন করতে হবে।
find ./ -type f -exec sed -i ’s/\t/ /g’ {} +
" (এটি "" +
"এর পরিবর্তে" \;
"করা) একটি যথেষ্ট গতিপথ , যদি find
সংস্করণটি সমর্থন করে (এবং আমি ব্যক্তিগতভাবে এমন কোনও সংস্করণ মেলেনি যা নাও পজিক্স মান নয়) , সুতরাং আমি অনুমান করি যে এটি কিছু সিস্টেমে ঘটতে পারে -exec command {} +
the "ম্যানুয়ালটিতে " " দেখুন )। sed
প্রতিটি ফাইলের জন্য একটি উদাহরণ চালু করার পরিবর্তে, এটি সিস্টেমের মতো ( getconf ARG_MAX
= আমার সিস্টেমে = 2097152) যতটা ফাইল সমর্থন করে তত যুক্তিযুক্ত তালিকা তৈরি করবে xargs
এবং এভাবে আরও কম sed
প্রক্রিয়া চালু করবে ।
sed
এটির জন্য নোট করুন: ওএস এক্স এর সংস্করণটি \t
ট্যাব এস্কেপ ক্রমটি বুঝতে পারে না । আপনি এটি একটি আক্ষরিক ট্যাব চরিত্রের সাথে প্রতিস্থাপন করতে পারেন, যা আপনি শেলটি প্রবেশ করে [Ctrl]+V, [Tab]
।
এটি করার প্রচুর উপায় রয়েছে। আপনি যত্নবান না হন বা আপনি যেমন লিনাক্সে নতুন হিসাবে দেখাচ্ছেন তেমন করার সময় এই কাজ করার সময় নিজেকে পায়ে গুলি করার অনেকগুলি উপায়ও রয়েছে। ধরে নিই যে আপনি যে ফাইলগুলির রূপান্তর করতে চান তার একটি তালিকা তৈরি করতে পারেন, হয় find
সম্পাদকের সাহায্যে ম্যানুয়ালি কিছু ব্যবহার করে , কেবল সেই তালিকাটি নীচের অংশে পাইপ করুন।
while read file
do
expand "$file" > /tmp/expandtmp
mv /tmp/expandtmp "$file"
done
এর সাথে আপনি নিজের পাতে গুলি করতে পারেন একটি টাইপো তৈরি করা যাতে আপনি নিজের উল্লেখ করা সমস্ত ফাইলের নামের সাথে একটি খালি ফাইল মুভিং করে যান, যার ফলে আপনার সমস্ত ফাইলের সামগ্রী মুছে ফেলা যায়। সুতরাং সাবধানতা অবলম্বন করুন এবং আপনি যে ফাইলগুলি ব্যাক আপ করেছেন তার একটি ছোট সেটটিতে আপনি প্রথমে যা কিছু করেন তা পরীক্ষা করুন।
mv
সাফল্যের উপর শর্তাধীন expand
:expand ... && mv ...
expand -t 4
ট্যাবগুলি 4 টি স্পেসে প্রসারিত করতে ভুলবেন না । এছাড়াও, এই পদ্ধতিটি পিছনে নতুন লাইনের তৈরি করতে পারে। তবে অন্যথায় এটি কাজ করে।
find . -type f -iname "*.js" -print0 | xargs -0 -I foo tab2space foo foo
-I foo
প্রতিটি ইনপুট লাইনের জন্য একটি টেম্পলেট ভেরিয়েবল ফু তৈরি করে, যাতে আপনি একাধিকবার ইনপুটটি উল্লেখ করতে পারেন।
-print0
এবং -0
উভয় কমান্ডকে স্পেসের পরিবর্তে লাইন বিভাজক হিসাবে \ 0 ব্যবহার করতে বলুন, সুতরাং এই কমান্ডটি ফাঁকা স্থান সহ পাথের জন্য কাজ করে।
ইহা ভাল:
find . -name *.java ! -type d -exec bash -c 'expand -t 4 "$0" > /tmp/e && mv /tmp/e "$0"' {} \;
/tmp/e
কারণ যদি অন্য কোনও ফাইল সেই ফাইলটি ব্যবহার করে তবে তা এতে বিশৃঙ্খলা সৃষ্টি করবে। দুটি ব্যবহারকারী একই সাথে এটি ব্যবহার করতে চাইলে পছন্দ করুন।
নিম্নলিখিত সমস্যাগুলির কথা মাথায় রেখে আমি এই সমস্যাটি দিয়েছি:
শেষের প্রয়োজনীয়তা পূরণ করা সবচেয়ে কঠিন ছিল কারণ "প্রসারিত" জায়গায় ফাইলগুলি সংশোধন করতে দেয় না।
আমি নিম্নলিখিত সমাধান নিয়ে এসেছি:
find . -type f -regextype egrep -regex '.*\.(c|cpp|h|hpp)' -print0 | xargs -0 -n 1 -P 10 -IFILE bash -c ' ( echo "Processing FILE..." && expand -t 4 "FILE" > /tmp/expand.$$ && mv /tmp/expand.$$ "FILE" ) || exit 255'
এখানে কিছু ব্যাখ্যা:
expand
, আমি ধরে নিচ্ছি সে / র পাঠ্যটির প্রান্তিককরণ চায় wants