আমার মতো স্ট্রিং রয়েছে:
|abcdefg|
এবং আমি |
শুরুতে এবং এর শেষে দুটি অক্ষর ছাড়াই মূল স্ট্রিং সহ একরকম (স্ট্রিং 2 এর মতো) ডাকা একটি নতুন স্ট্রিং পেতে চাই যাতে আমার কাছে এটি থাকে:
abcdefg
বাশ এ কি সম্ভব?
আমার মতো স্ট্রিং রয়েছে:
|abcdefg|
এবং আমি |
শুরুতে এবং এর শেষে দুটি অক্ষর ছাড়াই মূল স্ট্রিং সহ একরকম (স্ট্রিং 2 এর মতো) ডাকা একটি নতুন স্ট্রিং পেতে চাই যাতে আমার কাছে এটি থাকে:
abcdefg
বাশ এ কি সম্ভব?
উত্তর:
আপনি করতে পারেন
string="|abcdefg|"
string2=${string#"|"}
string2=${string2%"|"}
echo $string2
অথবা যদি আপনার স্ট্রিংয়ের দৈর্ঘ্য স্থির থাকে তবে আপনি এটি করতে পারেন
string="|abcdefg|"
string2=${string:1:7}
echo $string2
এছাড়াও, এটি কাজ করা উচিত
echo "|abcdefg|" | cut -d "|" -f 2
এটিও
echo "|abcdefg|" | sed 's/^|\(.*\)|$/\1/'
awk
সমাধান রয়েছে। আমি শিখতে হবে awk
।
IFS='|' read string2 <<< $string
:)
"${string:1:-1}"
man bash
।
এখানে তালিকাভুক্ত কয়েকটি পোস্ট বন্ধ করে দেওয়া এটির সহজ উপায় বলে মনে হচ্ছে:
string="|abcdefg|"
echo ${string:1:-1}
সম্পাদনা: বাশ ৪.২ সহ উবুন্টুতে কাজ করে; 4.1 ব্যাশ সহ সেন্টোস-এ কাজ করে না
আর একটি উপায় হ'ল ব্যবহার head
ও tail
আদেশগুলি:
$ echo -n "|abcdefg|" | tail -c +2 | head -c -2
abcdefg
[something something]
বন্ধনী কেটে ফেলার লক্ষ্য নিয়ে আমার একটি স্ট্রিং ছিল , তাই echo "[something something]" | tail -c +2 | head -c -2
কাজ শেষ। একটি টিপ জন্য ধন্যবাদ!
echo -n "|abcdefg|" | tail -c +2 | head -c -1
। আমার সম্পাদনাগুলি কেন প্রত্যাখ্যান করা হয়েছিল তা আমি নিশ্চিত নই ... সত্যি কথা বলতে খুব দুঃখ হয়। দেখুন man head
আরও তথ্যের জন্য
এবং অন্য একটি:
string="|abcdefg|"
echo "${string//|/}"
| মুছে ফেলার জন্য আপনি সেড ব্যবহার করতে পারেন কেবল প্রতীকটিই উল্লেখ না করে অবস্থানগত রেফারেন্সগুলি যেমনটি ব্যবহার করেছেন:
$ echo "|abcdefg|" | sed 's:^.\(.*\).$:\1:'
abcdefg
যেখানে ':' হ'ল ডিলিমিটার (আপনি এগুলি / বা কোনও চরিত্রের সাথে কোয়েরিতে নেই, সাইন অনুসরণ করে যে কোনও চিহ্ন এটি করবে) এখানে ^ (ক্যারেট) অর্থ ইনপুট স্ট্রিংয়ের শুরুতে এবং $ (ডলার) মানে শেষে. দ্য . (পয়েন্ট) যে এটি ক্যারেটের পরে এবং ডলারের চিহ্নের আগে এটি একটি একক চরিত্রকে উপস্থাপন করে। সুতরাং অন্য কথায় আমরা প্রথম এবং শেষ অক্ষর মুছে ফেলছি। মনে রাখবেন এটি | কোনও অক্ষর মুছে ফেলবে | এটি স্ট্রিং উপস্থিত নেই।
গো EX:
$ echo "abcdefg" | sed 's:^.\(.*\).$:\1:'
bcdef
কিছুটা আরও ভার্বোজ অ্যাপ্রোচ, তবে প্রথম এবং শেষ চরিত্রের যে কোনও ধরণের উপর কাজ করে, এক হতে হবে না। বুনিয়াদি ধারণাটি হ'ল আমরা একটি পরিবর্তনশীল নিচ্ছি, একে অক্ষর অনুসারে এটি পড়ছি এবং কেবলমাত্র নতুন ভেরিয়েবলের সাথে আমরা যুক্ত করব
এখানে একটি সম্পূর্ণ ফাংশন রূপান্তরিত যে পুরো ধারণা
crop_string_ends() {
STR="$1"
NEWSTR=""
COUNT=0
while read -n 1 CHAR
do
COUNT=$(($COUNT+1))
if [ $COUNT -eq 1 ] || [ $COUNT -eq ${#STR} ]
then
continue
fi
NEWSTR="$NEWSTR"$CHAR
done <<<"$STR"
echo $NEWSTR
}
এবং এখানে একই ফাংশনটি এখানে রয়েছে:
$> crop_string_ends "|abcdefg|"
abcdefg
$> crop_string_ends "HelloWorld"
elloWorl
>>> mystring="|abcdefg|"
>>> print(mystring[1:-1])
abcdefg
বা কমান্ড লাইনে:
$ python -c 'import sys;print sys.stdin.read()[1:-2]' <<< "|abcdefg|"
abcdefg
$ echo "|abcdefg|" | awk '{print substr($0,2,length($0)-2)}'
abcdefg
$ ruby -ne 'print $_.split("|")[1]' <<< "|abcdefg|"
abcdefg
$ string="|abcdefg|"
$ string="${string#?}" && string="${string%%?}"
$ echo "$string"
abcdefg
Http://tldp.org/LDP/abs/html/parameter-substedia.html থেকে
${var#Pattern}
থেকে সরান সবচেয়ে কম অংশ মিল সামনে শেষ এর । থেকে সরান দীর্ঘতম অংশ মিল ফিরে শেষ এর ।$var
$Pattern
$var
${var%%Pattern}
$var
$Pattern
$var
awk -F\| '{ print $2 }' <<<"|string|"