ফাইলের বিষয়বস্তুকে লোয়ার কেসে রূপান্তর করুন


85

আমার কাছে tempকিছু লোয়ার-কেস এবং আপার-কেস সামগ্রী রয়েছে।

ইনপুট

আমার tempফাইলের বিষয়বস্তু :

hi
Jigar
GANDHI
jiga

আমি সমস্ত ওপরেরকে নিম্নে রূপান্তর করতে চাই ।

হুকুম

আমি নিম্নলিখিত আদেশটি চেষ্টা করেছি:

sed -e "s/[A-Z]/[a-z]/g" temp

তবে ভুল আউটপুট পেয়েছে।

আউটপুট

আমি এটি হিসাবে চাই:

hi
jigar
gandhi
jiga

যুক্তির বিকল্প অংশে কী হওয়া দরকার sed?


উত্তর:


122

যদি আপনার ইনপুটটিতে কেবল ASCII টি অক্ষর থাকে তবে আপনি ব্যবহার করতে trপারেন:

tr A-Z a-z < input 

বা (IMO মনে রাখা এবং টাইপ করা কম সহজ; তবে ASCII লাতিন অক্ষরের মধ্যে সীমাবদ্ধ নয়, যদিও GNU সহ কিছু বাস্তবায়নে trএখনও একক বাইট অক্ষর সীমাবদ্ধ, সুতরাং ইউটিএফ -8 লোকেলগুলিতে এখনও ASCII অক্ষরে সীমাবদ্ধ):

tr '[:upper:]' '[:lower:]' < input

আপনি যদি ব্যবহার করতে হয় sed:

sed 's/.*/\L&/g' < input

(এখানে জিএনইউ বাস্তবায়ন অনুমান করে)।

পসিক্সের সাহায্যে sedআপনাকে সমস্ত লিখিত লিখিত লিখন লিখিতকরণ নির্দিষ্ট করতে হবে এবং তারপরে আপনি কোন বর্ণগুলি রূপান্তর করতে চান তা চয়ন করতে পারেন:

sed 'y/AǼBCΓDEFGH.../aǽbcγdefgh.../' < input

সাথে awk:

awk '{print tolower($0)}' < input

3
দয়া করে নোট করুন যে \Lএটি একটি GNU এক্সটেনশন।
অ্যান্থন

\Lএখনও পর্যন্ত আমার জন্য ভাল কাজ করে আপনি যে পয়েন্টটি জিএনইউ সম্প্রসারণ
আলোকিত করুন

2
@JigarGandhi। sedএটি ইউনিক্স কমান্ড। বিভিন্ন সিস্টেমে বিভিন্ন আচরণ এবং কার্যকারিতা সহ বিভিন্ন রূপ রয়েছে। ধন্যবাদ, আজকাল, এমন একটি মান রয়েছে যা সর্বাধিক মানানসই তাই আপনি সর্বনিম্ন বৈশিষ্ট্যগুলির একটি ন্যূনতম সেটটিতে গণনা করতে পারেন। \Lতাদের মধ্যে নেই এবং এটি জিএনইউ দ্বারা প্রবর্তিত হয়েছিল sed(স্ট্যান্ডার্ড ex/ তে একই অপারেটরের সাথে মেলে viএবং অন্যান্য বাস্তবায়নে সাধারণত এটি উপলভ্য নয়।
স্টাফেন চেজেলাস

9
মনে রাখবেন যে কিছু trবাস্তবায়ন জিএনইউ trমাল্টি-বাইট লোকেলগুলিতে সঠিকভাবে কাজ করে না (তাদের বেশিরভাগই আজকাল, echo STÉPHANE | tr '[:upper:]' '[:lower:]'উদাহরণস্বরূপ চেষ্টা করুন )। গনুহ সিস্টেমে, আপনি পছন্দ করতে পারেন sedবৈকল্পিক বা awkএর tolower()
স্টাফেন চেজেলাস

5
একটু সংশোধন: sed 's/.*/\L&/g' < input\1যদি না আপনি যেমন wurtle তার মধ্যে আছে প্রথম বন্ধনী দিয়ে সাবস্ট্রিং উল্লেখ মিলেছে সাবস্ট্রিং রেফারেন্স কাজ করবে না। তবে, &পুরো ম্যাচটি উপস্থাপন করতে ব্যবহার করা কিছুটা পরিষ্কার , যেমন দেখানো হয়েছে
এডওয়ার্ড ব্রাউন

30

ভিএম ব্যবহার করে এটি অত্যন্ত সহজ:

$ vim filename
gg0guGZZ

ফাইলটি খোলে, ggপ্রথম লাইনে 0, প্রথম কলামে যায়। সঙ্গে guG, ফাইল নীচে পর্যন্ত সমস্ত অক্ষর ক্ষেত্রে কমে যায়। ZZসংরক্ষণ এবং প্রস্থান

এটি আপনার দ্বারা নিক্ষেপ করা প্রায় যা কিছু হ্যান্ডেল করা উচিত; এটি সংখ্যা উপেক্ষা করবে, এটি ASCII ব্যতীত পরিচালনা করবে।

আপনি যদি বিপরীতটি করতে চান, তবে ছোট ছোট অক্ষরগুলি বড় হাতের অক্ষরে পরিণত করুন, একটিটির uজন্য সরিয়ে নিন U: gg0gUGZZএবং আপনি সেট করেছেন।


14
লল "সুপার সিম্পল"
17'17

এটি স্পষ্টতই অনেকগুলি ফাইলের জন্য ভাল করে না
কোরি গোল্ডবার্গ

আমার এখন পর্যন্ত সবচেয়ে প্রিয় উত্তর !!!!
মোনা জালাল

1
@ কোরিগল্ডবার্গ vim file1 file2 fileetcএবং তারপরে এমন কিছু কিছু ফাইল সম্ভবত কার্যকর:bufdo gg0guG:w<CR> হবে । যদিও এটি পরীক্ষা করা হয়নি!
ট্যাঙ্কোরস্যামশ

@ ট্যানকোরস্যামশ যা এখনও প্রচুর সংখ্যক ফাইলে স্কেল করে না
কোরি গোল্ডবার্গ

17

আমি ddনিজেই এর জন্য পছন্দ করি।

<<\IN LC_ALL=C 2<>/dev/null \
dd conv=lcase
hi
Jigar 
GANDHI
jiga
IN

... পায় ...

hi
jigar
ghandi
jiga

LC_ALL=Cইনপুট যে কোন multibytes রক্ষা করা - যদিও কোন multibyte রাজধানীতে রূপান্তরিত করা হবে না। (জিএনইউ) এর ক্ষেত্রেও এটি একই tr- উভয় অ্যাপ্লিকেশন কোনও নন-সি লোকালে ইনপুট ম্যাঙ্গেলিংয়ের প্রবণ। iconvএকটি ব্যাপক সমাধান জন্য উভয় সঙ্গে একত্রিত করা যেতে পারে।

2>/dev/nullপুনর্নির্দেশ পরিত্যাগ ddএর ডিফল্ট স্থিতি প্রতিবেদন - এবং এর দ্বারা stderr। এটি ছাড়া ddউপরের ডাব্লু / মুদ্রণের তথ্যের মতো কোনও কাজ সমাপ্তি অনুসরণ করা হবে যেমন কতগুলি বাইট প্রক্রিয়াজাত করা হয়েছিল ইত্যাদি ইত্যাদি follow


trবড় ফাইলগুলি পরিচালনা করার চেয়ে এই সমাধানটি আরও দ্রুততর , ধন্যবাদ!
হোয়াইটওয়ানটারওয়াল্ফ

13

আপনি পার্ল 5 ব্যবহার করতে পারেন:

perl -pe '$_=lc' temp

বিকল্পটি -pইনপুট প্রতিটি রেখার জন্য একবারে নির্দিষ্ট অভিব্যক্তি চালানোর জন্য পার্লকে বলে, ফলাফল মুদ্রণ, অর্থাৎ এর চূড়ান্ত মান $_-eস্ক্রিপ্টযুক্ত ফাইলের বিপরীতে প্রোগ্রামটি পরবর্তী যুক্তি হিসাবে নির্দেশ করবে। lcলোয়ারকেসে রূপান্তরিত হয়। কোনও যুক্তি ছাড়াই এটি চালিত হবে $_। এবং $_=এটি আবার সংরক্ষণ করে যাতে এটি মুদ্রিত হয়ে যায়।

যে একটি ভিন্নতা হবে

perl -ne 'print lc' temp

ব্যবহার -nকরা শেষের দিকে মুদ্রণ করা -pছাড়া এটির মতো $_। সুতরাং পরিবর্তনশীল এ সংরক্ষণ করার পরিবর্তে, আমি একটি স্পষ্ট প্রিন্ট বিবৃতি অন্তর্ভুক্ত করছি।

সিডের বিপরীতে পার্লের একটি সুবিধা হ'ল আপনার কোনও জিএনইউ এক্সটেনশন দরকার নেই। এমন প্রকল্প রয়েছে যা নন-জিএনইউ পরিবেশের সাথে সামঞ্জস্যপূর্ণ হতে হবে তবে এর মধ্যে পার্ল আশা নির্ভরতা রয়েছে। এর সাথে তুলনা করলে tr, এটি হতে পারে পার্লকে lcআরও সহজে লোকাল-সচেতন করা যেতে পারে। perllocaleবিশদ জন্য ম্যান পৃষ্ঠা দেখুন ।


9

আপনাকে ম্যাচিং প্যাটার্নটি ক্যাপচার করতে হবে এবং তারপরে এটি সংশোধনকারী দ্বারা প্রতিস্থাপনে ব্যবহার করতে হবে:

sed 's/\([A-Z]\)/\L\1/g' temp

\(...\)"ধারন করে" এনক্লোজিং মিলেছে টেক্সট, প্রথম ক্যাপচার যায় \1পাশে \2সংখ্যায়ন অনুযায়ী হয়, ইত্যাদি নেস্টেড যেমনটি ক্ষেত্রে বন্ধনী খোলার জন্য।

\Lধর্মান্তরিত ক্ষেত্রে কম দখল প্যাটার্ন, এছাড়াও আছে \Uবড় হাতের অক্ষরে জন্য।


3
আপনার এটি করার দরকার নেই - পুরো প্যাটার্নটি সর্বদা ধরা পড়ে&
মাইকসার্ভ

সত্য, তবে তারপরে আমি ক্যাপচারিং ম্যাচগুলি ব্যাখ্যা করার সুযোগটি হাতছাড়া
করতাম

1

এমভিজির উত্তরের জন্য আপনি পার্ল 6 ব্যবহার করতে পারেন:

perl6 -pe .=lc temp

এখানে $ _ অন্তর্নিহিত, এবং শেল দ্বারা এটির বিস্তার থেকে রক্ষা করার জন্য আপনার একক উদ্ধৃতি প্রয়োজন নেই (special _ একটি বিশেষ বাশ প্যারামিটার হচ্ছেন; দেখুন: https://www.gnu.org/software/bash/manual/ এইচটিএমএল_নোড / বিশেষ-পরামিতিগুলি html )

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