আপার-কেস স্ট্রিংকে লোয়ার-কেস এবং তদ্বিপরীতকে রূপান্তর করতে আমি বাশ আদেশটি কী ব্যবহার করতে পারি?
ধন্যবাদ.
আপার-কেস স্ট্রিংকে লোয়ার-কেস এবং তদ্বিপরীতকে রূপান্তর করতে আমি বাশ আদেশটি কী ব্যবহার করতে পারি?
ধন্যবাদ.
উত্তর:
যদি স্ট্রিংটি ইতিমধ্যে কোনও চলকটিতে সঞ্চিত থাকে তবে আপনি নির্দিষ্টভাবে (ব্যাশ ৪.০ থেকে উপলব্ধ) আপনার 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
।
${string,,}
স্বরলিপি শুধুমাত্র ব্যাশ সংস্করণের জন্য বিদ্যমান 4+। অন্যথায় অন্য সমাধানগুলির মধ্যে একটির প্রয়োজন যেমন $(echo $string | tr '[:upper:]' '[:lower:]')
,।
ইউনিকোডের সাথে সঠিকভাবে কাজ করার খুব কম পদ্ধতি রয়েছে:
জিএনইউ সেড ৪.২.২ কাজ করে :
$ 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Ą
gawk
ডিফল্ট অ্যাজক (যেমন দেখানো হয়েছে update-alternatives --display awk
) হিসাবে রয়েছে । আপনি কি নিশ্চিত mawk
যে 13.10 এ ডিফল্ট?
sed
1990 সাল থেকে \U
;-) বিকল্পটি সমর্থন করেছে । কোনও গ্নু-সেড নির্দিষ্ট বৈশিষ্ট্য নয়। অন্যথায়, দুর্দান্ত উত্তর, অনেকগুলি বিকল্প, এত অল্প সময় ;-) সবার জন্য শুভকামনা!
uc
পার্লে কাজ করে না কারণ আপনাকে use Encode
বা করতে হবে use utf8
। আপনার উদাহরণটিকে আবার লিখুন echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
এবং এটি কার্যকর হবে। এছাড়াও
আমি ব্যাশ অভ্যন্তরীণ টাইপসেট ব্যবহার করব বা একটি ছোট হাতের ভেরিয়েবল সংজ্ঞায়িত করার জন্য কমান্ড ঘোষণা করব ।
$ 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.
আমি নিজেও ভিন্ন ভিন্ন পরিবেশে কাজ করার কারণে টাইপসেট সিনট্যাক্সটি এখনও ব্যবহার করি, সুতরাং আমার স্ক্রিপ্টগুলি পুনরায় লিখতে হবে না।
typeset
অনুমোদিত হয়নি বলে মনে করা হয় এবং প্রতিস্থাপিত দ্বারাdeclare
আপনি tr
কমান্ড দিয়ে এটি করতে পারেন ।
টার্মিনালে ( Ctrl+ Alt+ T)
এই আদেশ:
echo 'String here' | tr "[:lower:]" "[:upper:]"
ছোট হাতের অক্ষরে বড় হাতের অক্ষরে রূপান্তরিত হবে।
echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"
বড় হাতের অক্ষরে ছোট হাতের মধ্যে রূপান্তর করা হবে।
উদাহরণ:
ক্রেডিট সাইবারসিটিতে যায়
tr A-Z a-z
রাখেন তবে পাশাপাশি কাজ করবে।
এটি খাঁটি বাশ সমাধান নয়, তবে আপনি নিজের স্ট্রিংগুলি পাইপ করতে পারেন perl
( অলি যেমন করেছিলেন sed
):
$ echo lowercase | perl -ne 'print "\U$_"'
LOWERCASE
এবং \L
এর বিপরীত প্রভাব ফেলবে:
$ echo UPPERCASE | perl -ne 'print "\L$_"'
uppercase
এই সরল কমান্ডটি আপার থেকে লোয়ার ক্ষেত্রে ব্যবহার করুন যেখানে 'f' ফাইলের নাম যেখানে আপনি রূপান্তর করতে চান want
tr "A-Z" "a-z" < f
নিম্ন থেকে উচ্চতর ক্ষেত্রে
tr "a-z" "A-Z" < f