একটি বড় হাতের অক্ষরে লোয়ার-কেস রূপান্তর করার আদেশ?


47

আপার-কেস স্ট্রিংকে লোয়ার-কেস এবং তদ্বিপরীতকে রূপান্তর করতে আমি বাশ আদেশটি কী ব্যবহার করতে পারি?

ধন্যবাদ.



2
স্ট্যাকওভারফ্লো / প্রশ্ন / 2264428/… এও প্রচুর সমাধান । কার্সারি এক নজরে বেশিরভাগ এখানে beাকা আছে বলে মনে হয়।
পিবিএইচজে

উত্তর:


59

যদি স্ট্রিংটি ইতিমধ্যে কোনও চলকটিতে সঞ্চিত থাকে তবে আপনি নির্দিষ্টভাবে (ব্যাশ ৪.০ থেকে উপলব্ধ) আপনার bashপ্যারামিটার প্রসারণ ব্যবহার করতে পারেন ${parameter,,pattern}, যেখানে parameterআপনার ভেরিয়েবলের নাম এবং patternবাদ দেওয়া হয়েছে:

$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!

নোট করুন যে এটি ভেরিয়েবলের মান পরিবর্তন করে না, কেবলমাত্র আউটপুট। ভেরিয়েবল পরিবর্তন করতে আপনাকে নতুন মান নির্ধারণ করতে হবে:

$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!

উপরের ক্ষেত্রে রূপান্তরটি এর সাথে কাজ করে ${parameter^^pattern}:

$ echo ${string^^}
HELLO, WORLD!

এটি ইউনিকোড স্ট্রিংগুলির সাথেও কাজ করে (কমপক্ষে বর্তমান ব্যাশ সংস্করণগুলির সাথে সম্ভবত কমপক্ষে কমপক্ষে ৪.৩ প্রয়োজন):

$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ

আপনি যদি ব্যবহার করে থাকেন তবে একই ফলাফলগুলি অর্জন zshকরতে আপনি প্যারামিটার এক্সপেনশন ফ্ল্যাগগুলি ( ${(FLAGS)NAME}; zsh 2.5 থেকে পাওয়া যায়) ব্যবহার করতে পারেন । bashসিনট্যাক্স কাজ করে না zsh 1) । লোয়ার কেসের জন্য পতাকাটি হ'ল L; উপরের ক্ষেত্রে এটি হয় U:

$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"

এটি ইউনিকোড স্ট্রিংগুলির সাথেও কাজ করে (কমপক্ষে zsh 5.0 থেকে; আমি পূর্ববর্তী সংস্করণগুলির সাথে চেষ্টা করিনি):

$ string='ἈΛΦΆβητος'
$ echo ${(L)string} 
ἀλφάβητος
$ echo ${(U)string}  
ἈΛΦΆΒΗΤΟΣ



1) যদিও, দেখতে যে zsh এর দীর্ঘকাল ধরে এটি ছিল, সম্ভবত এটি হওয়া উচিত: " zshসিনট্যাক্সটি কাজ করে নাbash


3
${string,,}স্বরলিপি শুধুমাত্র ব্যাশ সংস্করণের জন্য বিদ্যমান 4+। অন্যথায় অন্য সমাধানগুলির মধ্যে একটির প্রয়োজন যেমন $(echo $string | tr '[:upper:]' '[:lower:]'),।
কুইন কমেন্ডেন্ট

40

ইউনিকোডের সাথে সঠিকভাবে কাজ করার খুব কম পদ্ধতি রয়েছে:

জিএনইউ সেড ৪.২.২ কাজ করে :

$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ

bash 4.2.45 ঘোষণা কার্যকর হয় না :

$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą

বাশ 4.2.45 প্যারামিটার সম্প্রসারণ কাজ করে না :

$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą

4.3.42 বাশ declareএবং প্যারামিটার সম্প্রসারণের কাজ :

$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką

GNU tr 8.20 কাজ করে না :

$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą

mawk (উবুন্টু 13.10 এ ডিফল্ট awk) কাজ করে না :

$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą

গোক কাজ :

$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ

পার্ল খাঁটি ইউসি () কাজ করে না :

$ echo "Idą gęsi łąką" | perl -ne 'print uc($_);'
IDą GęSI łąKą

কোনও ইউনিকোড ইঙ্গিত ছাড়াই পাইথন 2 কাজ করে না :

$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą

পাইথন 2 যখন ইউনিকোডের কাজগুলি পরিচালনার জন্য নির্দেশিত হয় :

$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ

পাইথন 3 কাজ :

$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ

1
উবুন্টু ১৩.০৪-এ, আমার কাছে gawkডিফল্ট অ্যাজক (যেমন দেখানো হয়েছে update-alternatives --display awk) হিসাবে রয়েছে । আপনি কি নিশ্চিত mawkযে 13.10 এ ডিফল্ট?
কিরি

sed1990 সাল থেকে \U;-) বিকল্পটি সমর্থন করেছে । কোনও গ্নু-সেড নির্দিষ্ট বৈশিষ্ট্য নয়। অন্যথায়, দুর্দান্ত উত্তর, অনেকগুলি বিকল্প, এত অল্প সময় ;-) সবার জন্য শুভকামনা!
শেল্টার

প্লাস সেখানে তুর্কি কিছু সমস্যা হতে (ডটেড এবং আমি বিন্দু বিহীন), নিম্নলিখিত লিঙ্ক এ আরো চেহারার জন্য হবে: - unicode.org/Public/UNIDATA/SpecialCasing.txt - stackoverflow.com/questions/23524231/... - en.wikipedia। org / wiki / dotted_and_dotless_I
আজাত

আপনার উদাহরণস্বরূপ, পার্স ucপার্লে কাজ করে না কারণ আপনাকে use Encodeবা করতে হবে use utf8। আপনার উদাহরণটিকে আবার লিখুন echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'এবং এটি কার্যকর হবে। এছাড়াও
স্ট্যাকওভারফ্লো.com/

20

আমি ব্যাশ অভ্যন্তরীণ টাইপসেট ব্যবহার করব বা একটি ছোট হাতের ভেরিয়েবল সংজ্ঞায়িত করার জন্য কমান্ড ঘোষণা করব

$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case

মানটি সেট করা হলে অক্ষরগুলি হ্রাস করা হয়, আপনি যখন ভেরিয়েবলটি টাইপ করেন না। সুতরাং স্ক্রিপ্টের শুরুতে টাইপসেট করা ভাল। বড় হাতের জন্য আপনি টাইপসেট করতে পারেন ।

$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE

এটি বাশ শেলের সাথে সুনির্দিষ্ট নয়, এটি ksh এও কাজ করে, সম্ভবত এটি পসিক্স শেল সংজ্ঞাতে।

সম্পাদনা: অনেক লোক আস্তে আস্তে আমাকে এই বিষয়টির দিকে ইঙ্গিত করেছিলেন যে টাইপসেটটি এখন বাশকে অপ্রচলিত হিসাবে বিবেচনা করা হয় এবং ঘোষণা দ্বারা প্রতিস্থাপন করা হয় । উভয় আদেশ সমান equivalent

$ help typeset
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.


$ help declare
declare: declare [-aAfFgilrtux] [-p] [name[=value] ...]
    Set variable values and attributes.

আমি নিজেও ভিন্ন ভিন্ন পরিবেশে কাজ করার কারণে টাইপসেট সিনট্যাক্সটি এখনও ব্যবহার করি, সুতরাং আমার স্ক্রিপ্টগুলি পুনরায় লিখতে হবে না।


2
+1 অবিশ্বাস্য, আমি কখনই এটি জানতাম না! BTW কিছু অতিরিক্ত তথ্য: আমি ম্যানুয়াল এই পর্যন্ত তাকিয়ে এটা মনে হচ্ছে যে typesetঅনুমোদিত হয়নি বলে মনে করা হয় এবং প্রতিস্থাপিত দ্বারাdeclare
থম

1
@ আপনাকে ধন্যবাদ, দেখে মনে হচ্ছে বাশ তার "বর্ন শেল শিকড়" থেকে অনেক দূরে জীবন শুরু করেছিল :)
এমমানুয়েল

17

আপনি trকমান্ড দিয়ে এটি করতে পারেন ।

টার্মিনালে ( Ctrl+ Alt+ T)

এই আদেশ:

echo 'String here' | tr "[:lower:]" "[:upper:]"

ছোট হাতের অক্ষরে বড় হাতের অক্ষরে রূপান্তরিত হবে।

echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"

বড় হাতের অক্ষরে ছোট হাতের মধ্যে রূপান্তর করা হবে।

উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

ক্রেডিট সাইবারসিটিতে যায়


2
আপনি যদি লোকেলগুলির বিষয়ে যত্ন না tr A-Z a-zরাখেন তবে পাশাপাশি কাজ করবে।
নিক মাত্তিও

9

আপনি জিনিসগুলির মাধ্যমে পাইপও করতে পারেন sed:

$ echo lowercase | sed 's/.*/\U&/'
LOWERCASE

এবং \Lএর বিপরীত প্রভাব ফেলবে:

$ echo UPPERCASE | sed 's/.*/\L&/'
uppercase

1

এটি খাঁটি বাশ সমাধান নয়, তবে আপনি নিজের স্ট্রিংগুলি পাইপ করতে পারেন perl( অলি যেমন করেছিলেন sed):

$ echo lowercase | perl -ne 'print "\U$_"'
LOWERCASE

এবং \Lএর বিপরীত প্রভাব ফেলবে:

$ echo UPPERCASE | perl -ne 'print "\L$_"'
uppercase

-1

এই সরল কমান্ডটি আপার থেকে লোয়ার ক্ষেত্রে ব্যবহার করুন যেখানে 'f' ফাইলের নাম যেখানে আপনি রূপান্তর করতে চান want

tr "A-Z" "a-z" < f

নিম্ন থেকে উচ্চতর ক্ষেত্রে

tr "a-z" "A-Z" < f

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