আমি কীভাবে উবুন্টুতে অনেকগুলি ফাইলে code এল কোড পরিবর্তন করতে পারি?


8

আমার কাছে প্রচুর এক্সএমএল ফাইল রয়েছে, এর মধ্যে 50000 এরও বেশি।

কিছু এক্সএমএল ফাইলে কিছু ফাইল এ জাতীয় লেখা থাকে

<filename>abc.JPEG<^Lilename>

^Lএটি কেবল একটি চরিত্র, তবে ^Lগুগলের সাথে কী বোঝায় তা খুঁজে পাচ্ছি না ।

আমি যখন catকোনও ফাইলের বিষয়বস্তু মুদ্রণ করতে ব্যবহার করি তখন এটি নীচের মতো দেখায়

<filename>abc.JPEG<
                   ilename>

যাইহোক, আমি পরিবর্তন <filename>abc.JPEG<^Lilename>করতে চাই<filename>abc.JPEG</filename>

আমি ইতিমধ্যে অনেক ফাইল যেমন একটি শব্দ পরিবর্তন করার জন্য কিছু কমান্ড পেয়েছি

find . -exec perl -pi -e 's/[find_word]/[change_word]/g' {} \;

তবে এই কমান্ডটি আমার ক্ষেত্রে কাজ করে না, কারণ আমি যখন কেবল টাইপ করি তখন এটি অনুসন্ধান শব্দটি স্বীকৃতি দিতে পারে না ^L

আমি কিভাবে পরিবর্তন করতে পারেন <filename>abc.JPEG<^Lilename>থেকে <filename>abc.JPEG</filename>অনেক ফাইল আছে?


6
দৃশ্যত কেউ এমন প্রসঙ্গে <\filename>পরিবর্তে ব্যবহৃত হয়েছে </filename>যেখানে \fফর্ম ফিড চরিত্র হিসাবে ব্যাখ্যা করা হবে। আপনার সম্ভবত এই ফাইলগুলির উত্স সন্ধান করা উচিত এবং তাদের উত্পন্ন সরঞ্জামের সাহায্যে বিকাশকারীকে সমস্যাটি চিহ্নিত করা উচিত। ফাইলগুলি ঠিক করার জন্য, গৃহীত উত্তরটি ঠিক আছে।
হান্স-মার্টিন মোসনার

উত্তর:


17

কন্ট্রোল-এল (হিসাবে উপস্থাপিত ^L) হ'ল "ফর্ম ফিড" অক্ষর। এএসসিআইআই-তে এর দশমিক মান 12 ( Lবর্ণমালার 12 তম বর্ণ) বা হেক্সের মান 0c থাকে:

$ printf 'foo\x0cbar\n' | cat -et
foo^Lbar$

$ printf 'foo\x0cbar\n'
foo
   bar

হেক্সাডেসিমাল এস্কেপ কোড নির্দিষ্ট করে আপনি সেটের মতো সরঞ্জাম ব্যবহার করে এটি প্রতিস্থাপন করতে পারেন:

$ printf 'foo\x0cbar\n' | sed 's/\x0c//'
foobar

বিকল্পভাবে, ^Lকীবোর্ড সিকোয়েন্স CTRL+ V CTRL+ ব্যবহার করে সরাসরি রচনা করুনL

sed 's/CTRL+VCTRL+L//'

আপনার নির্দিষ্ট প্রতিস্থাপনের জন্য, দেওয়া

$ printf '<\x0cilename\n'
<
 ilename

তারপর

$ printf '<\x0cilename\n' | sed 's/<\x0c/<\/f/g'
</filename

( gপ্রতি লাইনে একাধিক উদাহরণ উপস্থিত থাকলে সংশোধক যুক্ত করা হয়)।


আমার ক্ষেত্রে, "$ প্রিন্টফ '<0 x0 শিরোনাম \ n' | সেড 's / <\ x0c / <\\ f / g'" কাজ করছে না। তবে, আপনার উত্তর অনুসারে, "$ সন্ধান করুন- ভাল কাজ করে. আপনার উত্তরের জন্য ধন্যবাদ :)
ইয়াং

@ ইয়াং দুঃখিত, আমি ঠিক বুঝতে পেরেছি যে আমি আমার উত্তরে স্ল্যাশ এবং ব্যাকস্ল্যাশকে বিভ্রান্ত করেছি (এখনই সংশোধন করা হয়েছে) - তবে এখনও নিশ্চিত নয় যে কেন এটি
সেড

খুব ভাল উত্তর! এটি আরও ভাল হবে যদি এর মধ্যে এমনটি বলা থাকে findযা সেই 50000 এক্সএমএল ফাইলগুলির উপরে লুপ করেছে এবং স্বয়ংক্রিয়ভাবে প্রতিটি একটিকে প্রক্রিয়া করেছে (এবং ব্যাকআপও তৈরি করেছে)।
কিংসলে

2

হ্যান্স-মার্টিন মোশনার মন্তব্যগুলিতে যেমন উল্লেখ করেছেন, মনে হচ্ছে এক্সএমএল তৈরি করার সময় কেউ ফরোয়ার্ড স্ল্যাশগুলির পরিবর্তে ব্যাকস্ল্যাশ ব্যবহার করেছে (অথবা সম্ভবত <filename>ইউনিক্স-টু-উইন্ডোজ কনভার্টারের মাধ্যমে পুরো বিভাগটি চালিয়েছিল যা স্ল্যাশ সম্পর্কে অতিমাত্রায় উদ্বেগজনক ছিল)। \fএকটি ফর্ম-ফিড অক্ষর, ওরফে ইউ + 0 সি বা ^ এল এর জন্য খুব কম ব্যবহৃত একটি পালানোর ক্রম। পাইপলাইনের কিছু পরে পদক্ষেপ এর পরে \fআক্ষরিক ইউ + 0 সি অক্ষরের সাথে প্রতিস্থাপন করা হয়েছে ।

ভাগ্যক্রমে, ইউ + 0 সি একটি অত্যন্ত বিরল চরিত্র যা কোনওভাবে এক্সএমএল-তে ইচ্ছাকৃতভাবে পাওয়া যায় না। আর শুধুমাত্র যেহেতু \fএই হিসাবে (বলুন) বিরোধিতা উত্পাদন করবে, \gবা \k, একটি সার্বজনীন খোঁজ-এবং-প্রতিস্থাপন না শুধুমাত্র ঠিক করা উচিত </filename>কিন্তু </folder>, </file>, বা অন্য কিছু যে mangled গিয়েছে।

স্টিল্ড্রাইভারের সেড-স্ক্রিপ্ট এটিই করে; আমি এটিকে আরও সামান্য সাধারণ করে তুলব:

sed 's|\x0c|/f|g'

এর অর্থ "(গুলি ) লোভালিভাবে \x0c(যেটি ইউ + 0 সি) এর সমস্ত দৃষ্টান্ত /fমোছা"।


2

\fপার্লের ফর্ম ফিড অক্ষর। দেখে মনে হচ্ছে এই দূষিত ফাইলগুলি পার্ল এবং এক্সএমএল উভয়ের জন্যই নতুন কেউ তৈরি করেছেন।

এখানে অনেক পারিলার ফিক্স রয়েছে - যা সেডের সাথে স্বীকৃত উত্তরের বিপরীতে সমস্ত ফাইলের স্বয়ংক্রিয় আপডেটের ওপি'র লক্ষ্যগুলিও পূরণ করে, যা জুটিবদ্ধ না হওয়ার সাথে সাথে কেবল একটি ফাইলে কাজ করবে find

\fহেক্সাডেসিমাল কোডের পরিবর্তে কেবল নিজেকে নিয়োগ করা যেতে পারে x0c

find . -type f -exec perl -pi.bkp -e 's [ \f ilename ][ /f ilename ]gx' {} \;

এখানে আমি কেবল প্লেইন ফাইলগুলি ফিরিয়ে -type fআনতে টেলিফোনে যুক্ত করেছি find- অন্যথায় তালিকায় findফিরে আসবে ., এবং আপনি যখন এটি সম্পাদনা করার চেষ্টা করবেন তখন একটি সতর্কতা ট্রিগার করবে, যদিও সমস্ত কিছু এখনও কাজ করবে।

আমি xপতাকাটি ব্যবহার করে রিজেক্সকে আরও সহজ করে তুলেছি যা রিয়েল হোয়াইটস্পেসকে উপেক্ষা করে আপনাকে আপনার রেগেক্সের উপাদানগুলিকে ফাঁকা করে দেবে। আপনি যদি এটি পছন্দ না করেন তবে এখানে এটি বাইরে রয়েছে:

find . -type f -exec perl -pi.bkp -e 's[\filename][/filename]g' {} \;

এবং সম্ভবত ফর্ম ফিডের সমস্ত অক্ষর উদ্দীপনাযুক্ত এবং সমস্তগুলি প্রতিস্থাপন করা উচিত /f, তারপরে আপনি ওয়ান-লাইনার আরও নীচে স্লিম করতে পারেন:

find . -type f -exec perl -pi.bkp -e 's[\f][/f]g' {} \;

s///পার্লে আপনার রেগেক্স সাবস্টিটিউশন কমান্ডের উপাদানগুলি ( ) ঘিরে ফেলতে আপনাকে ফরোয়ার্ড স্ল্যাশ ব্যবহার করার দরকার নেই । আপনি যে কোনও চিহ্ন ব্যবহার করতে পারেন। আপনি যদি কোনও জোড়াযুক্ত বন্ধনী-জাতীয় চিহ্ন ব্যবহার করতে চান তবে, আপনাকে সেগুলি দুটিই ব্যবহার করতে হবে: s[old][new]উদাহরণস্বরূপ।

যেহেতু আমি স্ল্যাশ ব্যবহার করছি না, তাই আমাকে কোনও স্ল্যাশ থেকে বাঁচতে হবে না।

যেমন -i.bkp: perl -pi -eআপনাকে জায়গায় জায়গায় সম্পাদনা করতে দেয় - তবে আপনি যদি পার্ল প্রোগ্রামটি খুঁজে বের করে প্রতিস্থাপন করতে চান তবে অতিরিক্ত বীমা চাইলে আপনি একটি ফাইল এক্সটেনশনে রাখতে পারেন যাতে এটি মূল ফাইলগুলির একটি অনুলিপি তৈরি করে আপনি. এখানে, আমি ব্যবহার করেছি .bkp

পার্লের অতি সাম্প্রতিক সংস্করণগুলিতে, আপনার সিস্টেমটিও যদি বিদ্যুৎ হ্রাস বা ডিস্কের অভাবের অভাবে চালিত হওয়ার মতো গুরুতর সমস্যার মুখোমুখি হয় তবে ইনস-প্লেস সম্পাদনাটিকে আরও বেশি স্থিতিস্থাপক হিসাবে আপডেট করা হয়েছে। এখানে পার্ল লেখক ব্রায়ান ডি ফয়েস সাম্প্রতিক পার্সে ইন-প্লেস সম্পাদনা উন্নত করেছেন।

এই ধরণের কাজের জন্য আপনার পার্ল ব্যবহার করার কথা বিবেচনা করা উচিত, কারণ এটি একটি অত্যন্ত শক্তিশালী তবুও নিম্ন-রেটযুক্ত সাধারণ-উদ্দেশ্য প্রোগ্রামিং ভাষা, যার মূল নকশার লক্ষ্যগুলির একটি হ'ল প্রতিস্থাপন sedএবং awkআরও ভাল কিছু দিয়ে।

পার্ল 5 এর Regex ম্যাচিং ক্ষমতা এবং উন্নত Regex সিনট্যাক্স পর্যন্ত সেই অতিক্রম sed, awk, এবং প্রকৃতপক্ষে প্রত্যেক অন্যান্য প্রোগ্রামিং পৃথক্ পার্ল 6 থেকে ভাষা, পার্ল উভয় সহজ এবং উন্নত Regex হেরফেরের জন্য সবচেয়ে যুক্তিসম্মত পছন্দ।

স্পষ্ট করার জন্য: খুব sedঠিকঠাক সাথে কাজ করবে findএবং আপনি sed -i.bkpসম্পাদিত প্রতিটি ফাইলের ব্যাকআপ তৈরি করতেও ব্যবহার করতে পারেন, তবে যতদূর আমি জানি এটি পার্ল 5.28 এবং তারপরের উপরের অতিরিক্ত স্থিতিস্থাপকতার বৈশিষ্ট্য দেয় না। এটি ক্লানকিয়ার এবং অনেক কম শক্তিশালী traditionalতিহ্যবাহী ইউএনআইএক্স ® রেজেেক্স সিনট্যাক্সও ব্যবহার করে।

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