সুতরাং আমার প্রশ্নটি একটি সম্পর্কিত প্রশ্নের ভিত্তিতে খুব বেশি ভিত্তিতে , তবে এর একটি মূল পার্থক্য রয়েছে।
দেওয়া উত্তরে:
sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile
আমি একটি প্রকরণ তৈরি করেছি যা FOOBAR
ভেরিয়েবল তৈরির জন্য কাজ করে (যেমন প্রোগ্রামের নাম এবং তারপরে একটি লুপের জন্য প্রোগ্রাম এবং তাদের ইনস্টলেশন স্থিতির একটি তালিকা তৈরি করে)। এটি একটি বরং জড়িত প্রকল্পের জন্য আমি কিছু নতুন বৈশিষ্ট্য সহ রাসম্পবেরি পাই এর জন্য ড্রইল ইনস্টলেশনটি সহজ করার জন্য কাজ করছি , তবে এটি কীটগুলির আলাদা ক্যান যাতে আমি প্রবেশ করতে যাচ্ছি না।
sed -i '/^'"$FOOBAR"'=/{h;s/=.*/=newvalue/};${x;/^$/{s//'"FOOBAR"'=newvalue/;H};x}' infile
আমি এমন newvalue
একটি হতে চাই $variable
যা স্ক্রিপ্টে পরিবর্তন আনতে পারে । আমি কীভাবে এই কাজটি করব তা ঠিক বুঝতে পারি না , কেবল ব্যবহার করে '
এবং "
এটি সঠিকভাবে না করে। আমি কয়েক ঘন্টা ব্রাউজিং এবং টিউটোরিয়াল পড়ার চেষ্টা করেছি , তবে আমি কেবল যথেষ্ট বুঝতে পারি না এবং সেডের অভ্যন্তরীণ কাজগুলিতে খুব গভীরভাবে ডুব দিয়েছি। বেশিরভাগ সময়ে, এই পরিবর্তনশীল ভালো কিছু সহজ হবে: yes
, no
, অথবা error
। তবে, আমি এটি ফোল্ডার এবং ফাইলের পথগুলি উপস্থাপন করতেও ব্যবহার করতে পারি ... সুতরাং আমি /
এখানে বিকল্পগুলি সম্পর্কেও চিন্তিত । এমনকি যদি এটির পুরো উত্তর না হয় তবে আমি এটিকে আরও ভালভাবে বুঝতে যেদিকে যেতে হবে সেদিকে ইঙ্গিত পেতে পারলে আমি নিজেকে এটি খুঁজে বের করতে পেরে খুশি।
সম্পাদনা: পোস্ট করার মতো অনেক কিছুই নেই যে আমি নিশ্চিত যে আমি নিখোঁজ রয়েছি সেখানে মৌলিক কিছু রয়েছে, আমি কেবলমাত্র নতুন মূল্যবোধের আশেপাশে উদ্ধৃতি দেওয়ার বিভিন্নতার চেষ্টা করেছি। যেমন নীচে ...
sed -i '/^FOOBAR=/{h;s/=.*/=$newvalue/};${x;/^$/{s//FOOBAR=$newvalue/;H};x}' infile
আউটপুট: FOOBAR = $newvalue
এটি ভুল। আউটপুট করা উচিত জন্য সঞ্চিত মান newvalue
!
sed -i '/^FOOBAR=/{h;s/=.*/="$newvalue"/};${x;/^$/{s//FOOBAR="$newvalue"/;H};x}' infile
আউটপুট: FOOBAR = "$newvalue"
এটি ভুল। আউটপুট করা উচিত জন্য সঞ্চিত মান newvalue
!
sed -i '/^FOOBAR=/{h;s/=.*/='"$newvalue"'/};${x;/^$/{s//FOOBAR='"$newvalue"'/;H};x}' infile
আউটপুট: sed: -e expression #1, char 30: unknown option to `s'
যদি newvalue
এর সমান হয় Yes
, তবে আমি আউটপুটটি FOOBAR = Yes
বা সম্ভবত একটি ফোল্ডার পাথ চাই।
'"$newvalue"'
আমি মনে করি, বৈকল্পিকের সাথে কাজ করা উচিত, যদি না যুক্তি $newvalue
পরিবর্তন হয় sed
। উদাহরণস্বরূপ যদি এটি থাকে /
তবে এর জন্য ডিলিমিটার হিসাবে অন্য একটি চরিত্র চয়ন করুন sed
। sed 's/a/b/'
হতে পারে sed 's|a|b|'
বা এমনকি হতে পারে sed 'sRaRbR'
। এমন একটি চরিত্র চয়ন করুন যা সংঘটিত না হয় $newvalue
।
unknown option to 's'
। এটি $newvalue
ধারণ করে না এমনটি দিয়ে চেষ্টা করুন /
।
\$
লাইন / শেষ রেখার রেফারেন্সের শেষ): এড়িয়ে চলা পরামর্শ দেব sed "/^$FOOBAR=/{h;s/=.*/=$newvalue/};\${x;/^\$/{s//$FOOBAR=$newvalue/;H};x}"
। কিন্তু @ উপর KamilMaciorowski এর মন্তব্য মনে রাখবেন /
মধ্যে $newvalue
, আপনি DELIMITER পরিবর্তন করার প্রয়োজন হতে পারে যে যার মানে।
sed \|^FOOBAR=|...etc
। ইন s
কমান্ড পালাবার প্রয়োজন হয় না।
sed
? এটি পার্ল বা অজানা, বা এমনকি যত্ন সহকারে সম্মিলিত শেল বিল্টিনগুলির সাহায্যে আরও সহজ হবে।