কোনও ফাইলের নির্দিষ্ট স্ট্রিংয়ের পরে পাঠ্য কীভাবে সন্নিবেশ করা যায়?


68

এই মুহুর্তে আমি echo "Hello World" >> file.txtকোনও ফাইলে কিছু পাঠ্য সংযোজন করতে ব্যবহার করছি তবে আমাকে একটি নির্দিষ্ট স্ট্রিংয়ের নীচে পাঠ্যও যুক্ত করতে হবে আসুন "[বিকল্প]" বলি, এটি কি সম্ভব sed?

উদাহরণ:

ইনপুট ফাইল

Some text
Random
[option]
Some stuff

আউটপুট ফাইল

Some text
Random
[option]
*inserted text*
Some stuff

1
আপনাকে আরও সুনির্দিষ্ট হতে হবে এবং সঠিক আদেশগুলি দিয়ে আপনাকে সহায়তা করার জন্য লোকেদের জন্য কিছু নমুনা পাঠ্য দিতে হবে।
ক্লিমেট

দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন inputএবং outputলাইনগুলি এবং প্রদর্শন করুন । কারণ আপনি প্রশ্ন অস্পষ্ট। আপনিও করতে পারেন echo "Hello World [option]" >> file.txt, কিন্তু এটির কোনও অর্থ নেই।

রেফারেন্সের জন্য আরও তথ্য সরবরাহ করার জন্য আমি প্রশ্নটি সম্পাদনা করেছি তবে গ্রহণযোগ্য উত্তরটি আমি অর্জন করার চেষ্টা করছিলাম
জাভিয়ের ভিলানুয়েভা

আপনি যদি কেবল একটি কনফিগার ফাইল সম্পাদনা করতে চান তবে এটি আমার পাওয়া সেরা সমাধান: unix.stackexchange.com/a/78076/20661
রুব77

উত্তর:


104

ম্যাচের পরে লাইন যুক্ত করুন

  • sed '/\[option\]/a Hello World' input

ম্যাচের আগে লাইন sertোকান

  • sed '/\[option\]/i Hello World' input

অতিরিক্তভাবে আপনি -i.bkpসিডের বিকল্প ব্যবহার করে ব্যাকআপ নিতে পারেন এবং ইনপুট ফাইলটিকে ইনপ্লেস সম্পাদনা করতে পারেন


2
sed: 1: "/pattern/a some text here": command a expects \ followed by text
অসক্সে


ম্যাক ওএসএক্স জন্য, আমি যোগ করার জন্য প্রয়োজন \ <<NEWLINE>>পরে aবিকল্প
টম হাওয়ার্ড

উপরের কোডটি প্রতিটি একক ম্যাচের জন্য লাইন যুক্ত / সন্নিবেশ করবে। আপনি যদি কেবল প্রথম ম্যাচের জন্য লাইনটি যুক্ত / সন্নিবেশ করতে চান তবে আপনি 0,কমান্ডগুলিতে সংশোধন করতে পারেন : sed '0,/\[option\]/a Hello World' inputবাsed '0,/\[option\]/i Hello World' input
কিম্বাউডি

33

হ্যাঁ, এটি দিয়ে এটি সম্ভব sed:

sed '/pattern/a some text here' filename

একটি উদাহরণ:

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$

2
@ জাভিভার্ড আমি নিশ্চিত না যে আপনি প্রথম উত্তরটির অর্থ কী? যদি আপনি উত্তর দেওয়ার সময়কালে প্রথম বোঝাতে থাকেন তবে আপনি ভুল। আপনি টাইমস্ট্যাম্পগুলি সাবধানে পর্যবেক্ষণ করেন নি!
ডেভনুল

সর্বশেষতম স্ট্রিং মেলানোর পরে কি এটি যুক্ত করার কোনও উপায় আছে? উদাহরণস্বরূপ: foo bar option bar option baz । তাহলে কি প্যাটার্নটি হয়ে যায় foo bar option bar option addedstring baz ?
এরি

4

সাথে awk:

awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile

মনে রাখবেন যে কয়েকটি অক্ষরকে আক্ষরিক অর্থে অন্তর্ভুক্ত করা যাবে না তাই কাউকে পালানোর সিকোয়েন্সগুলি ব্যবহার করতে হবে (এগুলি একটি ব্যাকস্ল্যাশ দিয়ে শুরু হয়) উদাহরণস্বরূপ আক্ষরিক ব্যাকস্ল্যাশ মুদ্রণের জন্য একটি লিখতে হবে \\

এটি আসলে একই সাথে sedতবে অতিরিক্ত প্রতিটি পাঠ্য এম্বেড নিউলাইন আগে একটি ব্যাকস্ল্যাশ দ্বারা করা উচিত:

sed '/PATTERN/a\
add one line\
\\and one more' infile

এস্কেপ সিকোয়েন্স সম্পর্কে আরও তথ্যের জন্য ম্যানুয়ালটিতে পরামর্শ করুন।


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