কমান্ড লাইন থেকে কোনও ফাইলের দ্বিতীয় লাইনে কীভাবে লিখব?


29

আমার কাছে একটি বাহ্যিক প্রোগ্রাম রয়েছে যা একটি আউটপুট ফাইল তৈরি করে (লার্জিশ, 20 কে লাইন সম্ভব)।

আমার বিদ্যমান লাইন 1 এবং লাইন 2 এর মধ্যে একটি নতুন লাইন সন্নিবেশ করা দরকার I've এটা কর.

উত্তর:


20
awk 'NR==1{print; print "new line"} NR!=1'

12
একটু খাটো:awk 'NR==2 {print "new line"} 1'
গ্লেন জ্যাকম্যান

@glennjackman: আপনার সংস্করণটি আমার সিস্টেমে কাজ করে না, তবে উত্তরটি দেয়। বিশেষত, আপনার সাথে, লাইন 2টি নকল করা হয়েছে এবং নতুন লাইন উভয়ের মধ্যে সন্নিবেশ করা হয়েছে (সুতরাং লাইন 3 হিসাবে)।
নিকানা রেকলাভিক্স

২ য় লাইনে লেখা শুরু করার এবং পরবর্তী সমস্ত লাইন ওভাররাইট করার কোনও উপায় আছে কি?
সিএমসিডিগ্রাগনকাই

@ সিএমসিডিগ্রাগনকাই আপনি কী চাইছেন তা আমি নিশ্চিত নই। কেবলমাত্র নির্দিষ্ট ফাইলের প্রথম লাইন এবং একটি সেট দ্বিতীয় লাইন প্রিন্ট করবেন? প্রথম লাইন এবং তারপরে একটি ফাইলের বিষয়বস্তু? প্রথম ফাইলের প্রথম লাইন এবং তারপরে প্রথম প্রতিটি বাকী লাইনের জন্য দ্বিতীয় ফাইল থেকে একটি লাইন? আপনি কী চান তার খুব নির্দিষ্ট বিবরণ এবং অপেক্ষাকৃত সংক্ষিপ্ত তবে সম্পূর্ণ উদাহরণ সহ একটি নতুন প্রশ্ন জিজ্ঞাসা করতে পারেন।
কেভিন

16

আপনার নির্দিষ্ট ক্ষেত্রে, এটি সহজ হতে হবে:

sed '1 { P ; x }' your-file

ব্যাখ্যা: 1 লাইনে নিম্নলিখিতটি করুন

  1. পি লাইনটি ছড়াবে
  2. E x হোল্ডিং স্পেসের সাথে প্যাটার্ন স্পেসটি পরিবর্তন করুন (মূলত বাফারটি খালি করে)

তারপরে, লাইনটি (এখন খালি) আবার চক্রের অংশ হিসাবে মুদ্রিত হয়।


আপনি যদি নতুন লাইন চরিত্রের পরিবর্তে একটি নতুন লাইন যুক্ত করতে চান (যা আমি প্রথমে বুঝতে পেরেছিলাম) তবে কেবলমাত্র কমান্ড (অ্যাপেন্ড) ব্যবহার করুন:seda\

sed '1 a\
appended line' your-file

অথবা এমনকি

sed '1 aappended line' your-file

এটি appended lineলাইন 1 এর পরে " " সংযোজন করে ।


1
sed -i '1 a\\' fileশুধু একটি নতুন লাইন জন্য।
ফোর্সফেস্ক

1
@ ফোর্সফেস্ক হ্যাঁ, কেবল অসুবিধাই হ'ল এটি আমার দ্বিতীয় '1 aapended line'উদাহরণ হিসাবে জিএনইউজম ।
অ্যাঙ্গাস

8

আমার ধারণা এই sedপদ্ধতিটি হবে:

sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txt

এটি পাঠ্যটি ফাইলের দ্বিতীয় লাইনে পাবে এবং তারপরে ফাইলের সাথে প্রকৃত দ্বিতীয় লাইনটি তৃতীয় হয়ে যাবে।

নোট করুন , অ্যাপেন্ড মোডটি ব্যবহার করে যদি এটিটি করা হয় তবে এটি প্রথম লাইনটি ব্যবহার করতে হবে, যেহেতু পরিশিষ্টটি লাইন নম্বরটি উল্লেখ করার পরে ঘটবে।

sed '1 a whatever_line_of_text_you_wanted_to_INSERT' filename.txt



2

এটি আপনার পক্ষে কাজ করতে পারে:

sed 1G file

আপনি যদি somethingনতুন লাইনের পরে সন্নিবেশ করতে চান :

sed '1{G;s/$/something/}' file

অথবা আপনি যদি পরিচালনা করেন \n:

sed '1s/$/\nsomething/' file

অবশ্যই aআরও সহজ:

sed '1a something' file

আমি দুঃখিত, এটা কি করে?
নিখিল মুলি

এটি লাইন 1 এর পরে একটি নতুন লাইন সন্নিবেশ
করিয়েছে

1
বা বরং \nএক লাইনে একটি নতুন লাইন যুক্ত!
পোটং

1

আমি সাধারণত এটির edজন্য ব্যবহার করি :

(echo 1a; echo 'Line to insert'; echo .; echo w) | ed - filename

একটি sedসমাধানের মতো, তবে পলায়ন করা নিউলাইনগুলির গোলমাল ছাড়াই।


2
আপনি কিছু অনাবশ্যক পারে echo'র, বিশেষ করে অধীনে bash: ed - filename <<< $'1a\nLine to insert\n.\nw'
manatwork

1
সমস্ত শেলগুলিতে কাজ করে না, উদাহরণস্বরূপ dash, যা বহু সিস্টেমে রয়েছে /bin/sh
আর্জেজ

1
এটা কেন আমি লিখেছি "আপনি অনাবশ্যক পারে কিছু echo এর"। মোচন সব echo 'র প্রকৃতপক্ষে bashশুধুমাত্র বৈশিষ্ট্য কিন্তু হ্রাস echo4 থেকে 1 কাজ থেকে গণনা dashএবং kshখুব: echo '1a\nLine to insert\n.\nw' | ed - filename
manatwork

1
বা কেবল ব্যবহার করুনprintf %s\\n , যা আপনি প্রদত্ত প্রতিটি আরগের পরে একটি নতুন লাইন রাখে এবং আপনি যে রেখাটি সন্নিবেশ করতে চান তাতে এমবেড করা বিশেষ অক্ষরগুলিকে স্ক্রু করে না। এছাড়াও, কেন পাওয়া যায় edযখন ব্যবহার ex?
ওয়াইল্ডকার্ড


0

sedএএনএসআই এস্কেপ কোডগুলি ব্যবহার এবং (বাশ-নির্দিষ্ট):

# note: \ --> \\
printf '%s\n' 1 2 3 4 5 | sed -e $'1 { s/\\(.*\\)/\\1\\\ninserted line/; }'

0

আমি এর জন্য অজগর ব্যবহার করব

import fileinput

for linenum,line in enumerate(fileinput,FileInput("file",inplace=1)):
    if linenum ==1:
          print ""
          print line.rstrip() 
      else: 
          print line.rstrip()`

0

আমি কেবল একটি স্পষ্ট কাউন্টার ব্যবহার করতে চাই:

awk '(c==1) {print "new line"} (c!=1) {print $0} {c++}' file

0

সহজতম পদ্ধতি ব্যবহার করে printfএবং ex:

printf '%s\n' 1a 'my line to insert' . x | ex file

1aঅর্থ "প্রথম লাইনের পরে সংযোজন"; .সংযোজন শেষ হয়; xঅর্থ সংরক্ষণ এবং প্রস্থান করা।


0

উপরের উত্তরগুলির মধ্যে কোনওটিতেই মূল ফাইলটির পরিবর্তনগুলি কীভাবে সংরক্ষণ করা যায় তা উল্লেখ করা হয়নি, যা আমি ভাবি যে ওপি কী চেয়েছিল।

পৃষ্ঠায় ক্যাম করার সময় এটি অবশ্যই আমার প্রয়োজন ছিল।

সুতরাং ধরে নেওয়া আপনার ফাইল বলা হয় output.txt

sed -i '1 a This is the second line' output.txt

আমার বিশেষ ব্যবহারের ক্ষেত্রে হ'ল একটি জুনিট এক্সএমএল ফাইলে স্বয়ংক্রিয়ভাবে একটি এক্সএসএল স্টাইলশিট ঘোষণা to

sed -i '1 a <?xml-stylesheet type="text/xsl" href="junit-html.xsl"?>' junit.xml

yourownlinux.com/2015/04/… সেড করার জন্য একটি ভাল লিখিত পরিচয়ের প্রাসঙ্গিক অংশ।
চিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.