এসইডিতে কীভাবে ফাইলের পথ থেকে বাঁচবেন?


39

আমি প্রতিস্থাপন করতে চাই $fileWithPathমধ্যে $fileঅবশ্য এই কাজ করে না কারণ (আমি মনে করি) পথ পলান করা হয় না। কীভাবে এড়ানো যায়?

sed -i 's/${fileWithPath}/HAHA/g' $file

উত্তর:


71
sed -i 's|'$fileWithPath'|HAHA|g' file

একক উদ্ধৃতি একটি স্ট্রিং আক্ষরিক সংজ্ঞা দেয়। আক্ষরিক বাহিরের বাইরে চলকটি শেলটিকে সেই অংশটি প্রসারিত করতে দেয়।

এছাড়াও: আপনি যদি পথগুলি বিশ্লেষণ করতে চলেছেন তবে সেড কমান্ডে একটি ডিলিমিটার ব্যবহার করুন যা ডিরেক্টরি ডিলিমিটার "/" সাথে বিভ্রান্ত হয় না।


1
সতর্কতা অবলম্বন করুন যে যদি $fileWithPathসাদা স্থান থাকে তবে ভুল প্যাটার্নটি .োকানো হয়েছে।
লেকেনস্টেইন

ফাইল পাথের জন্য ডিলিমিটার পরিবর্তন করার বিষয়ে আপনার বোনাস টিপটি ছিল জীবন রক্ষাকারী!
শাদোনিনজা

আমি মনে করি আপনার কমান্ডে আপনার অনেক বেশি উক্তি আছে। আমার উদাহরণটি sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpnকাজ করে বলে মনে হচ্ছে।
লিও লোপোল্ড হার্টজ 준영

15

রিপ্লেসমেন্ট স্ট্রিং বা প্যাটার্ন স্ট্রিংয়ে স্ল্যাশ রয়েছে এমন পরিস্থিতিতে আপনি GNU সেড বিকল্প বিকল্প কমান্ডের জন্য একটি বিকল্প ডিলিমেটারকে মঞ্জুরি দেয় তা ব্যবহার করতে পারেন। ডিলিমিটারের জন্য সাধারণ পছন্দগুলি হ'ল পাইপ চরিত্র | বা হ্যাশ # - সীমিত চরিত্রের সেরা পছন্দটি প্রায়শই প্রক্রিয়াধীন ফাইলের ধরণের উপর নির্ভর করে। আপনার ক্ষেত্রে আপনি চেষ্টা করতে পারেন

sed -i 's#'$fileWithPath'#HAHA#g' $file

শেষ # এর পরে 'g' অক্ষরটি ফাইলের সমস্ত উপস্থিতি পরিবর্তন করতে ব্যবহৃত হয় যদি আপনাকে কেবল প্রথম উপস্থিতি পরিবর্তন করতে হয় তবে 'জি' মুছে ফেলুন।


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