উত্তর:
আপনার পোস্ট করা স্ক্রিপ্টটি 4 * n স্পেসগুলিকে n ট্যাবগুলিতে রূপান্তর করে, কেবল যদি সেই স্থানগুলি কেবলমাত্র ট্যাবগুলির আগে থাকে।
যদি আপনি 4 টি স্পেস 2 স্পেস দ্বারা প্রতিস্থাপন করতে চান তবে কেবল ইনডেন্টেশনে, যখন সেড দিয়ে এটি করা সম্ভব হয় তবে আমি তার পরিবর্তে পার্লের পরামর্শ দিই।
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
সেড ইন:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
indent
পরিবর্তে আপনি ব্যবহার করতে পারেন ।
সোজা উপায় কাজ করে না:
sed -r 's/ {4}/ /g'
যদি তা না হয় তবে কিছুটা ইনপুট পোস্ট করুন যেখানে এটি ব্যর্থ।
যদি কেবল শীর্ষস্থানীয় স্থানগুলিকে রূপান্তর করা হয়:
sed 'h;s/[^ ].*//;s/ / /g;G;s/\n *//'
মন্তব্য সহ:
sed '
h; # save a copy of the pattern space (filled with the current line)
# onto the hold space
s/[^ ].*//; # remove everything starting with the first non-space
# from the pattern space. That leaves the leading space
# characters
s/ / /g; # substitute every sequence of 4 spaces with 2.
G; # append a newline and the hold space (the saved original line) to
# the pattern space.
s/\n *//; # remove that newline and the indentation of the original
# line that follows it'
এছাড়াও ভিএম এর 'ts'
সেটিং এবং :retab
কমান্ড দেখুন
'ts'
এবং :retab
প্রশ্নের সমাধান নয়, তবে এটি সম্পর্কিত এবং আপনার সামগ্রিক লক্ষ্য মোকাবেলায় সহায়তা করতে পারে। আপনি করতে পারেন vim -- *.c
, :set ts=...
এবং তারপর :argdo retab
বা :argdo retab!
। আরও দেখুন 'sw'
বিকল্প এবং তেজ নিজস্ব ইন্ডেন্টিং ক্ষমতা।
sed 's/^\( \+\)\1\1\1/\1\1/' file
এটি নেতৃস্থানীয় স্পেসগুলি একই গ্রুপের চারটি দৃষ্টান্তে বিভক্ত করে কাজ করে (যাতে তারা সবাই সমান) এবং তারপরে তাদের গ্রুপটির মাত্র দুটি উদাহরণ দিয়ে প্রতিস্থাপন করে।
\+
) এর মাধ্যমে একই জিনিসটি অর্জন করতে পারেন । ধন্যবাদ.
Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1.