আমার একটি স্থানকে প্রতিস্থাপন করাতে সক্ষম হতে হবে (.
ব্যাশের একটি স্ট্রিংয়ে একটি স্পট ( ) একটি বিন্দু ( ) দিয়ে able
আমি মনে করি এটি বেশ সহজ হবে তবে আমি নতুন তাই এই ব্যবহারের জন্য কীভাবে অনুরূপ উদাহরণটি পরিবর্তন করব তা আমি বুঝতে পারি না।
আমার একটি স্থানকে প্রতিস্থাপন করাতে সক্ষম হতে হবে (.
ব্যাশের একটি স্ট্রিংয়ে একটি স্পট ( ) একটি বিন্দু ( ) দিয়ে able
আমি মনে করি এটি বেশ সহজ হবে তবে আমি নতুন তাই এই ব্যবহারের জন্য কীভাবে অনুরূপ উদাহরণটি পরিবর্তন করব তা আমি বুঝতে পারি না।
উত্তর:
ইনলাইন শেল স্ট্রিং প্রতিস্থাপন ব্যবহার করুন। উদাহরণ:
foo=" "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
আরও তথ্যের জন্য http://tldp.org/LDP/abs/html/string-manipulation.html দেখুন ।
tr
! ... উপলভ্য মেমরি এবং এইচডাব্লুয়ের সংস্থানগুলির উপর নির্ভর করে ... তবে আপনি ঠিক বলেছেন!: কাজ করার ধরণের উপর নির্ভর করে, উত্সর্গীকৃত সরঞ্জামগুলি আরও দক্ষ থাকে!
$'\n'
আপনি এটির tr
মতো ব্যবহার করতে পারেন :
tr " " .
উদাহরণ:
# echo "hello world" | tr " " .
hello.world
থেকে man tr
:
বর্ণনা
অনুবাদ, লুৎফর, এবং / অথবা স্ট্যান্ডার্ড ইনপুট থেকে ডিলিট অক্ষর, মানক আউটপুটে ing writ-।
ব্যাশে, আপনি কনস্ট্রাক্টের সাথে স্ট্রিংয়ে প্যাটার্ন প্রতিস্থাপন করতে পারেন ${VARIABLE//PATTERN/REPLACEMENT}
। শুধুমাত্র প্রথম ঘটনাটি প্রতিস্থাপন করতে কেবল /
এবং না ব্যবহার করুন //
। প্যাটার্নটি ফাইল গ্লোবগুলির মতো একটি ওয়াইল্ডকার্ড প্যাটার্ন।
string='foo bar qux'
one="${string/ /.}" # sets one to 'foo.bar qux'
all="${string// /.}" # sets all to 'foo.bar.qux'
পরামিতি প্রতিস্থাপন ব্যবহার করুন:
string=${string// /.}
পাথের জন্য এটি ব্যবহার করে দেখুন:
echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'
এটি ডাবল-কোটড স্ট্রিংয়ের অভ্যন্তরের স্থানটি একটি +
গাওয়ার সাথে প্রতিস্থাপন করে, তারপরে প্রতিস্থাপন করে+
ব্যাকস্ল্যাশ দিয়ে , তারপরে ডাবল-কোটগুলি সরিয়ে / প্রতিস্থাপন করে।
সাইগউইনের আমার একটি পাথের স্থানগুলি প্রতিস্থাপন করতে আমাকে এটি ব্যবহার করতে হয়েছিল।
echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'
sed
। উদ্ধৃতিগুলি অপ্রাসঙ্গিক।
tr
দীর্ঘ স্ট্রিংয়ের পক্ষে পছন্দ করতে পারে । আমার সিস্টেমেtr
বাশকে1000
অক্ষরের চেয়ে বেশি স্ট্রিং দিয়ে শুরু করে বাশকে ছাপিয়ে যায় । দেখে মনে হচ্ছে বাশের সময়ের জটিলতা লিনিয়ারের চেয়ে খারাপ। একটি ছোট পরীক্ষা:x="$(tr -dc 'a-z \n' </dev/urandom | head -c1M)"; time y="$(tr ' ' \\- <<< "$x")"; time z="${x// /-}"
। 1 এম (= 2 ^ 20) এর স্ট্রিং দৈর্ঘ্যের সাথেtr
নেওয়া0.04s
এবং ব্যাশ 5.0.11 লেগেছে17s
। সাথে 2 এমtr
নিল0.07s
(প্রত্যাশিত) তবে বাশ লাগল69s
(স্ট্রিং দৈর্ঘ্যের দ্বিগুণ হিসাবে 4 বার)।