ফোল্ডারের পাথের সাথে স্ট্রিং কীভাবে বদলাতে হবে


14

আমি নিম্নলিখিত বাশ লিপিটি লেখার চেষ্টা করছি:

HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;

আমি ফাইলগুলিতে যে লাইনটি পরিবর্তন করতে চাই তা হ'ল:

users                   = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"

সুতরাং শেষ ফলাফল হতে হবে:

users                   = "/opt/my_home/config/data/_DOMAIN_/users.conf"

তবে আমি তা পাচ্ছি না ... আমি অনুমান করি এটি পালিয়ে যাওয়ার কারণে ...

কেউ কি কিছু আলোকপাত করতে পারে?

ধন্যবাদ


আপনার অর্থ, s (h) এডিটি কিছু হালকা
আলেকজান্দ্রে হোল্ডেন ডেলি

উত্তর:


23

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

sed -i "s#_HOME_DIR_#$HOME_DIR#"

এছাড়াও মনে রাখবেন যে আপনি আপনার পরিবর্তনশীল নামটি ভুল লিখেছেন $ HOME_DIR (এটি আন্ডারস্কোর দিয়ে শুরু হয় না)।

$ HOME_DIR=/opt/my_home
$ echo "_HOME_DIR_/config/data/_DOMAIN_/users.conf" | sed "s#_HOME_DIR_#$HOME_DIR#"
/opt/my_home/config/data/_DOMAIN_/users.conf

আপনি কেবল আপনার স্ক্রিপ্টে ব্যবহারকারী ভেরিয়েবলের জন্য সমস্ত ক্যাপ ব্যবহার করা এড়াতে চাইতে পারেন - সেগুলি সিস্টেম ভেরিয়েবলের জন্য সংরক্ষিত রাখা উচিত। এছাড়াও gআপনি যদি একটি একক লাইনে একাধিক প্রতিস্থাপন করতে না চান তবে স্যুইচটি প্রয়োজনীয় নয়।


0

ভেরিয়েবল 'অপট / হোম' হার্ডকোডিং এর মতো কাজ করবে ..

find ./CONFIG -type f -exec sed -i "s/\_HOME\_DIR\_/opt\/home/g" {} \;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.