সমস্ত বড় হাতের অক্ষরে লোয়ারকেসে রূপান্তর করতে ওয়ান-লাইনার সেড করবেন?


131

আমার কাছে একটি পাঠ্য ফাইল রয়েছে যাতে কিছু শব্দ সমস্ত ক্যাপগুলিতে ছাপা হয়। আমি কেবল টেক্সটফাইলে সমস্ত কিছু ব্যবহার করে ছোট হাতের অক্ষরে রূপান্তর করতে সক্ষম হতে চাই sed। তার মানে প্রথম বাক্যটি তখন পড়বে, 'আমার কাছে একটি পাঠ্য ফাইল রয়েছে যাতে কিছু শব্দ সমস্ত ক্যাপগুলিতে ছাপা হয়।'


6
আপনি কি trআদেশ সম্পর্কে সচেতন ? কখনও কখনও এটি এর চেয়ে বেশি উপযুক্ত sed
ব্রায়ান ওকলে

@ ব্রায়ান ওকলি আমি এখনও অবধি ছিলাম না। এটা ইশারা জন্য ধন্যবাদ। তবে আমি যা বলছিলাম তা করতে আমি এটি কীভাবে ব্যবহার করব?
চৌম্বক

রঘুরামের উত্তরে প্রদত্ত লিঙ্কটি দেখুন।
ব্রায়ান ওকলে

1
যদি আপনাকে অবশ্যই সেড, বিড়াল <ইনপুট> ব্যবহার করতে হবে সেড 'y / ABCDEFÑØÅÆŒ / abcdefñøåæœ /' <- আপনাকে অবশ্যই সমস্ত অক্ষর বিশদ করতে হবে, বড় হাতের অক্ষরে to আমি জানি যে এই সমস্ত চরিত্রটি লেখা জটিল, তবে এটি আন্তর্জাতিক সমস্ত স্পেশাল চরিত্রের সাথেও কাজ করবে। :)
আরনো তেগসেইথ

উত্তর:


248

সহ tr:

# Converts upper to lower case 
$ tr '[:upper:]' '[:lower:]' < input.txt > output.txt

# Converts lower to upper case
$ tr '[:lower:]' '[:upper:]' < input.txt > output.txt

জিএনইউ ব্যবহার করে কাজ করে sed(বিএসডি sedসমর্থন করে না \L \U):

# Converts upper to lower case
$ sed -e 's/\(.*\)/\L\1/' input.txt > output.txt

# Converts lower to upper case
$ sed -e 's/\(.*\)/\U\1/' input.txt > output.txt

6
আমাকে নিজের উত্তরটি বেছে নিতে হয়েছিল কারণ আমি উত্তরগুলির অনুরাগী নই যা কেবলমাত্র লিঙ্কগুলি নিয়ে গঠিত।
চৌম্বক

6
ওএসএক্স জিএনইউ এক্সটেনশানগুলি সমর্থন করে না :(
এক্কিস

2
sed -e 's/.*/\L&/' input.txt > output.txtজিএনইউ
সেডের

1
@ কেকিস ওএসএক্স বিএসডি ব্যবহার করছে (যেমন উল্লেখ করা হয়েছে, বিএসডি সেড এটি সমর্থন করে না)। আপনি man sedকোন সংস্করণ ব্যবহার করছেন তা জানার জন্য উপরের লাইনটি পড়ার চেষ্টা করুন ।
রাইডার

কোনও কারণে যখন আমি আপনার আপার কেস প্যাটার্নটি ব্যবহার করি, এটি Uপ্রতিটি লাইনের সামনে একটি যুক্ত করে
এক্সট্রিমফাইথ

51

আপনার যদি জিএনইউ এক্সটেনশন থাকে তবে আপনি সেডের \ এল (নিম্নতম ম্যাচ, বা \ এল [নিম্ন] বা \ ই [শেষ - টগল কেসিং বন্ধ না হওয়া পর্যন্ত) ব্যবহার করতে পারেন, যেমন:

sed 's/.*/\L&/' <input >output

দ্রষ্টব্য: '&' এর অর্থ সম্পূর্ণ মিলের প্যাটার্ন।

পার্শ্ব নোট হিসাবে, জিএনইউ এক্সটেনশনের মধ্যে রয়েছে \ ইউ (উপরের), \ u (ম্যাচের উপরের পরবর্তী অক্ষর), \ l (ম্যাচের নিম্নে পরবর্তী অক্ষর)। উদাহরণস্বরূপ, আপনি যদি একটি বাক্য ক্যামেলকেস করতে চান:

$ sed -r 's/\w+/\u&/g' <<< "Now is the time for all good men..." # Camel Case
Now Is The Time For All Good Men...

দ্রষ্টব্য: অনুমান যেহেতু আমাদের জিএনইউ এক্সটেনশন রয়েছে তাই আমরা ড্যাশ-আর (বর্ধিত নিয়মিত এক্সপ্রেশন) বিকল্পটিও ব্যবহার করতে পারি, যা \ ডাব্লু (শব্দের চরিত্র) মঞ্জুরি দেয় এবং আপনাকে ক্যাপচারিং প্রথম বন্ধনী এবং এক বা একাধিক থেকে বাঁচতে মুক্তি দেয় কোয়ান্টিফায়ার (+)। (একপাশে: \W [non-word], \s [whitespace], \S [non-whitespace]এছাড়াও ড্যাশ-R সমর্থিত হয়, কিন্তু \d [digit]\D [non-digit]নয়।)


1
খুব দরকারী টিপ। আমি খুঁজে পেয়েছি যে উটের মামলার উদাহরণে গোলাকার প্রথম বন্ধনীগুলির প্রয়োজন নেই। 'গুলি / \ ডাব্লু + / \ ইউ ও / জি'ও কাজ করে।
পিজে_ফিনেগান

1
sed -ri 's/MATCH_WHATEVER/\L&/i' input-file.ext- /iসংশোধক ব্যবহার করে ম্যাচ কেস-সংবেদনশীল করে তোলে এবং এটি optionচ্ছিক। -iসুইচ ইন-জায়গা ফাইল পরিবর্তন করতে sed নির্দেশ দেওয়া হয়। আপনার যদি না করতে হয় তবে অন্য কোনও ফাইলে আউটপুট পুনর্নির্দেশ করার দরকার নেই।
জিম

1
আমি সত্যিই এই প্রয়োজন \E [end - toggle casing off]। ধন্যবাদ !
মেহেদি ইয়েদেস

37

আপনি awkযদি অন্য কোনও সরঞ্জাম বিবেচনা করতে ইচ্ছুক হন তবে আপনি এটি খুব সহজেই এটি করতে পারেন:

echo "UPPER" | awk '{print tolower($0)}'

1
এটির সেরা উত্তর, সিরিলিকের সাথে কাজ করুন। tr: - এটি দিয়ে কাজ করে নি।
আমারোক

2
অ্যাকসেন্ট সহ অক্ষরগুলি সন্ধান করুন। উদাহরণস্বরূপ tolowerহ্যান্ডেল করতে সক্ষম হবে নাÀ
স্যাম হিউস্টন

আপনি এই কমান্ডটি দিয়ে একটি গুচ্ছ ফাইলের নাম পরিবর্তন করতে পারেন: ls | awk '{print "mv " $0 " " tolower($0)}' | sh
নেকোবাস

15

এখানে অনেকগুলি সমাধান রয়েছে:

পার্ল, টিআর, সেড এবং অ্যাজকের সাথে উপকারকারীর কাছে

perl -ne 'print uc'
perl -npe '$_=uc'
perl -npe 'tr/[a-z]/[A-Z]/'
perl -npe 'tr/a-z/A-Z/'
tr '[a-z]' '[A-Z]'
sed y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
sed 's/\([a-z]\)/\U\1/g'
sed 's/.*/\U&/'
awk '{print toupper($0)}'

পার্ল, ট্র, সেড এবং অ্যাজকের সাথে ছোট হাতের কাছে

perl -ne 'print lc'
perl -npe '$_=lc'
perl -npe 'tr/[A-Z]/[a-z]/'
perl -npe 'tr/A-Z/a-z/'
tr '[A-Z]' '[a-z]'
sed y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
sed 's/\([A-Z]\)/\L\1/g'
sed 's/.*/\L&/'
awk '{print tolower($0)}'

ছোট হাতের কাছে জটিল বাশ:

while read v;do v=${v//A/a};v=${v//B/b};v=${v//C/c};v=${v//D/d};v=${v//E/e};v=${v//F/f};v=${v//G/g};v=${v//H/h};v=${v//I/i};v=${v//J/j};v=${v//K/k};v=${v//L/l};v=${v//M/m};v=${v//N/n};v=${v//O/o};v=${v//P/p};v=${v//Q/q};v=${v//R/r};v=${v//S/s};v=${v//T/t};v=${v//U/u};v=${v//V/v};v=${v//W/w};v=${v//X/x};v=${v//Y/y};v=${v//Z/z};echo "$v";done

বড় হাতের কাছে জটিল ব্যাশ:

while read v;do v=${v//a/A};v=${v//b/B};v=${v//c/C};v=${v//d/D};v=${v//e/E};v=${v//f/F};v=${v//g/G};v=${v//h/H};v=${v//i/I};v=${v//j/J};v=${v//k/K};v=${v//l/L};v=${v//m/M};v=${v//n/N};v=${v//o/O};v=${v//p/P};v=${v//q/Q};v=${v//r/R};v=${v//s/S};v=${v//t/T};v=${v//u/U};v=${v//v/V};v=${v//w/W};v=${v//x/X};v=${v//y/Y};v=${v//z/Z};echo "$v";done

ছোট হাতের কাছে সহজ ব্যাশ:

while read v;do echo "${v,,}"; done

বড় হাতের অক্ষরে সরল ব্যাশ:

while read v;do echo "${v^^}"; done

মনে রাখবেন যে $ {v,} এবং $ {v ^} কেবলমাত্র প্রথম অক্ষর পরিবর্তন করে।

আপনার এটি সেভাবে ব্যবহার করা উচিত:

(while read v;do echo "${v,,}"; done) < input_file.txt > output_file.txt


5

আমি এখানে কয়েকটি উত্তর পছন্দ করি তবে এখানে একটি সেড কমান্ড রয়েছে যা কোনও প্ল্যাটফর্মে কৌশলটি করা উচিত:

sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'

যাইহোক, এটি বোঝা সহজ। এবং y কমান্ড সম্পর্কে জানার মাঝে মাঝে কাজে আসতে পারে।


2
এটি নির্বিচারে আন্তর্জাতিক চরিত্রগুলির জন্য কাজ করে না তবে ওএস / এক্স
emrys57

এটা অবশ্যই আমার জন্য কাজ করেছে। আমি স্বীকার করতে হবে যে আমি প্রথমবার y কমান্ডটি ব্যবহার করেছি। ধন্যবাদ!
দৈত্য

4

আপনি যদি পিক্সিক সেড ব্যবহার করেন

কোনও প্যাটার্নের জন্য যে কোনও ক্ষেত্রে নির্বাচন (রেজিেক্স ব্যবহার করে আপনি কমান্ড চেয়েছিলেন রূপান্তরিত প্যাটার্নটি ব্যবহার করার চেয়ে অনুসন্ধানের প্যাটার্নটি রূপান্তর করে:

echo "${MyOrgPattern} | sed "s/[aA]/[aA]/g;s/[bB]/[bB]/g;s/[cC]/[cC]/g;s/[dD]/[dD]/g;s/[eE]/[eE]/g;s/[fF]/[fF]/g;s/[gG]/[gG]/g;s/[hH]/[hH]/g;s/[iI]/[iI]/g;s/[jJ]/[jJ]/g;s/[kK]/[kK]/g;s/[lL]/[lL]/g;s/[mM]/[mM]/g;s/[nN]/[nN]/g;s/[oO]/[oO]/g;s/[pP]/[pP]/g;s/[qQ]/[qQ]/g;s/[rR]/[rR]/g;s/[sS]/[sS]/g;s/[tT]/[tT]/g;s/[uU]/[uU]/g;s/[vV]/[vV]/g;s/[wW]/[wW]/g;s/[xX]/[xX]/g;s/[yY]/[yY]/g;s/[zZ]/[zZ]/g" | read -c MyNewPattern
 YourInputStreamCommand | egrep "${MyNewPattern}"

নিম্ন ক্ষেত্রে রূপান্তর

sed "s/[aA]/a/g;s/[bB]/b/g;s/[cC]/c/g;s/[dD]/d/g;s/[eE]/e/g;s/[fF]/f/g;s/[gG]/g/g;s/[hH]/h/g;s/[iI]/i/g;s/j/[jJ]/g;s/[kK]/k/g;s/[lL]/l/g;s/[mM]/m/g;s/[nN]/n/g;s/[oO]/o/g;s/[pP]/p/g;s/[qQ]/q/g;s/[rR]/r/g;s/[sS]/s/g;s/[tT]/t/g;s/[uU]/u/g;s/[vV]/v/g;s/[wW]/w/g;s/[xX]/x/g;s/[yY]/y/g;s/[zZ]/z/g"

বড় হাতের জন্য একই জন্য নীচের অক্ষরটি // এর মধ্যে উচ্চতর সমতুল্য দ্বারা প্রতিস্থাপন করুন

আনন্দ কর


(আমি ম্যাকওএস এ এটির পক্ষে সবচেয়ে ভাল কাজ করেছি) - ভাল, আমার বন্ধু - তবে একটি ছোট টোপো - আপনার জেজে কেস পিছনের দিকে রয়েছে। "এস / [এএ] / এ / জি; এস / [বিবি] / বি / জি; এস / [সিসি] / সি / জি; এস / [ডিডি] / ডি / জি; এস / [ইই] / ই / ছ; র / [FF] / চ / ছ; র / [GG] / ছ / ছ; র / [HH] / H / ছ; র / [ii] / I / ছ; র / [জেজে] / ঞ / ছ; র / [KK] / K / ছ; র / [ll] / L / ছ; S / [MM] / মিঃ / ছ; র / [NN] / N / ছ; র / [ওও] / ণ / ছ; র / [পিপি] / P / ছ; র / [QQ] / কুই / ছ; র / [RR] / R / ছ; র / [এস এস] / S / ছ; র / [TT] / টি / ছ; র / [UU] / U / ছ; র / [VV] / V / ছ; র / [WW] / W / ছ; র / [xx] / এক্স / ছ; র / [yY] / y / g; s / [zZ] / z / g "
নীল ম্যাকগিল

আমি নিশ্চিত না যে আপনাকে এত শ্রমনির্ভর কিছু করার দরকার কেন। আমি ধরে নিচ্ছি ম্যাক ওএসের জিএনইউ এক্সটেনশন নেই তবে আপনি যদি বিকল্প ব্যবহার ('গুলি') এর পরিবর্তে সেড ব্যবহার বন্ধ করে থাকেন তবে আপনি অনুলিপি ('y') এর মতো ব্যবহার করতে পারেন: সেড 'y / ABCDEFGHIJKLMNOPQRSTUVXXZ / abcdefghijklmnopqrstuvwxyz / '
Luv2code

লক্ষ্যটি হ'ল এমন কোনও পাঠ্য প্যাটার্ন নির্বাচন করা যা কোনও ডাটা উত্সের বিষয়বস্তু পরিবর্তন না করে কোনও নন জিএনইউ সিড থেকে নিম্ন / উচ্চতর y//
আকারের দেখায়

3

সংক্ষিপ্ত, মিষ্টি এবং আপনার পুনঃনির্দেশের প্রয়োজন নেই :-)

perl -p -i -e 'tr/A-Z/a-z/' file

হ্যাঁ, ভাল করে আমি এটিকে পিছনে এক নজর দিয়ে ব্যবহার করার চেষ্টা করেছি এবং এটি আমার ফাইলে সমস্ত অক্ষরের বেশিরভাগটি অন্য র্যান্ডম আপার কেস লেটারের সাথে প্রতিস্থাপন করেছে। যাইহোক আমাকে একটি ভাল হাসি দিয়েছেন। পার্ল সম্পর্কেও এই উত্তরটি থেকে আমি যা চেয়েছিলাম তা অর্জন করতে পেরেছিলাম: Askubuntu.com/a/527073/250556
ThorSummoner
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.