সেড কমান্ড যা ম্যাকওএস (কমপক্ষে, ওএস 10) এবং ইউনিক্সে একইভাবে কাজ করে (যেমন গিলসের মতো গনু সেডের প্রয়োজন নেই (বর্তমানে স্বীকৃত) একটি করে:
sed -e '/CLIENTSCRIPT="foo"/a\'$'\n''CLIENTSCRIPT2="hello"' file
এটি ব্যাশ এবং সম্ভবত অন্যান্য শেলগুলিতেও কাজ করে যা $ '\ n' মূল্যায়নের উদ্ধৃতি শৈলী জানে। সবকিছু এক লাইনে থাকতে পারে এবং পুরানো / পসিক্স সেড কমান্ডে কাজ করতে পারে। যদি CLIENTScriptT = "foo" (বা আপনার সমতুল্য) সাথে একাধিক লাইন মিলছে এবং আপনি প্রথমবার কেবল অতিরিক্ত লাইন যুক্ত করতে চান, তবে আপনি এটি নীচে পুনরায় কাজ করতে পারেন:
sed -e '/^ *CLIENTSCRIPT="foo"/b ins' -e b -e ':ins' -e 'a\'$'\n''CLIENTSCRIPT2="hello"' -e ': done' -e 'n;b done' file
(এটি লাইন সন্নিবেশ কোডের পরে একটি লুপ তৈরি করে যা বাকী ফাইলটি কেবল চক্রচক্র করে, আবার কখনও প্রথম সেড কমান্ডে ফিরে না আসে)।
আপনি লক্ষ্য করতে পারেন যে লাইনটি কোনও মন্তব্যে, বলায় বা ইন্টেন্টেড অবস্থায় দেখায় সে ক্ষেত্রে আমি ম্যাচিং প্যাটার্নটিতে একটি '^ *' যুক্ত করেছি। এটি 100% নিখুঁত নয় তবে সাধারণ হওয়ার সম্ভাবনা রয়েছে এমন কিছু অন্যান্য পরিস্থিতিতে রয়েছে। প্রয়োজনীয় হিসাবে সামঞ্জস্য করুন ...
এই দুটি সমাধানও সমস্যাটিকে ঘিরে রেখেছে (একটি লাইন যুক্ত করার জেনেরিক সমাধানের জন্য) যে আপনার নতুন lineোকানো লাইনে যদি অবিরত ব্যাকস্ল্যাশ বা অ্যাম্পারস্যান্ড রয়েছে তবে সেগুলি সেড দ্বারা ব্যাখ্যা করা হবে এবং সম্ভবত যেমনটি \n
হ'ল - যেমন।\0
মিলবে প্রথম লাইন। বিশেষত সহজ আপনি যদি কোনও ভেরিয়েবল থেকে আসে এমন একটি লাইন যুক্ত করেন যেখানে আপনাকে প্রথমে $ {var // using, বা অন্য কোনও সেড স্টেটমেন্ট ইত্যাদি ব্যবহার করে প্রথমে সমস্ত কিছু থেকে বাঁচতে হবে d
এই সমাধানটি স্ক্রিপ্টগুলিতে কিছুটা কম অগোছালো (যে উদ্ধৃতি দেওয়া এবং read n যদিও পড়া সহজ নয়), যখন আপনি কোনও ফাংশনে বললে, কোনও লাইনের শুরুতে কমান্ডের জন্য প্রতিস্থাপন পাঠ্যটি রাখতে চান না ইন্ডেন্টেড লাইনের সাথে আমি সুবিধা নিয়েছি যে $ '\ n' শেল দ্বারা একটি নতুন লাইনে মূল্যায়ন করা হয়, এটি নিয়মিত '\ n' একক-উদ্ধৃত মানগুলিতে নয়।
এটি যথেষ্ট দীর্ঘ হয়ে গেছে যদিও আমি মনে করি পার্ল / এমনকি এডক আরও পঠনযোগ্য হওয়ার কারণে জিততে পারে।