কোনও ফাইলের প্রথম লাইনের আগে কীভাবে পাঠ্য সন্নিবেশ করা যায়?


76

আমি sedএকটি নির্দিষ্ট লাইনে একটি ফাইলের মধ্যে পাঠ্য যুক্ত করার জন্য কমান্ডের আশেপাশে যাচ্ছিলাম । এটি লাইন 1 এর পরে পাঠ্য যুক্ত করার কাজ করে:

sed '1 a\

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

sed '0 a\

কিন্তু আমি এই ত্রুটি পাবেন: invalid usage of line address 0

যেকোনো পরামর্শ?


উত্তর:


101

sedInোকানো ( i) বিকল্পটি ব্যবহার করুন যা পূর্ববর্তী লাইনে পাঠ্য সন্নিবেশ করবে।

sed '1 i\

প্রশ্ন লেখকের আপডেট:

এটি জায়গায় ফাইলটি সম্পাদনা করতে - জিএনইউ সহ sed- আমাকে -iবিকল্পটি যুক্ত করতে হয়েছিল :

sed -i '1 i\anything' file

সিনট্যাক্সও

sed  -i '1i text' filename

নন-জিএনইউ সেডের জন্য

ব্যাকস্ল্যাশ 1i\এবং তার পরে অবিলম্বে আপনাকে রিটার্ন কীটি চাপতে হবে first_line_text:

sed -i '1i\
first_line_text
'

আরও মনে রাখবেন যে কিছু কিছু নন-জিএনইউ sedবাস্তবায়ন হয়েছে (উদাহরণস্বরূপ ম্যাকোএসের মধ্যে একটি ) পতাকাটির জন্য একটি আর্গুমেন্ট প্রয়োজন-i ( -i ''জিএনইউয়ের মতো একই প্রভাব পেতে ব্যবহার করুন sed)।


1
এটি -iবিকল্প ছাড়া কাজ করে না । আমি আপনার উত্তর গ্রহণ করার আগে আপডেট করব।
মানলো

1
ধন্যবাদ। আপনি কোন ওএস ব্যবহার করছেন? আসল সমাধানটি ওপেনসুস 9
সন্দেহভাজন

1
মজাদার! আমি লুবুন্টু 13.10 এ আছি এবং sed '1 i\this text is entered above the existing first line' fileআমার জন্য কাজ করে।

2
এখানে, স্নিগ্ধের মতো sed (GNU sed) 4.2.2সবেমাত্র sed '1 i text to insert' -i fileকাজ করে । ধন্যবাদ
টন

1
@ ফেআরডি awkনীচে আমার খারাপ স্থানের উত্তর দেখুন। এই কাজ করা উচিত.
রূডিমিয়ার

18

টেক্সট পেতে ইকো ব্যবহার করা হয়। বিড়াল ফাইলের নাম - কনসোলে ফাইলটি মুদ্রণ করে এবং এটি অন্য ফাইল ফাইল নাম 1 এ প্রেরণে ব্যবহার করে এবং তারপরে আমরা পছন্দসই ফাইলটির প্রথম লাইনে টেক্সটটি সন্নিবেশ করানোর জন্য ফাইলের নাম 1 ফাইলনেমে স্থানান্তরিত করি।

  (echo "some text" && cat filename) > filename1 && mv filename1 filename

7
নিম্নলিখিতটি কেন নিম্নমানের তা দয়া করে আমাকে জানান
অঙ্কিত শাহ

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

আমি upvated। আমার জন্য ksh উপর কাজ করে।
arcee123

16

আপনি প্রাক্তন মোডে ভিম ব্যবহার করতে পারেন:

ex -sc '1i|ALFA BRAVO' -cx file
  1. 1 প্রথম লাইন নির্বাচন করুন

  2. i পাঠ্য এবং নিউলাইন .োকান

  3. x সংরক্ষণ করেন এবং বন্ধ করেন


7

আপনি করতে চান সন্নিবেশ প্রথম লাইন সামনে টেক্সট বদলে যোগ পরে এটি, তাই ব্যবহার

sed '1 i\
your_text' your_file

এখানে একটি নথিও সহায়তা করতে পারে:

cat /dev/stdin your_file <<EOI
Your text
goes here
EOI

6

GNU awk> = 4.1 ব্যবহার করে:

awk -i inplace 'BEGINFILE{print "first line"}{print}' foo.sh

সমস্ত sedউত্তরের বিপরীতে , এটি খালি ফাইলগুলিতেও কাজ করে।


inplaceএটি একটি গ্রন্থাগার, এবং দুর্ভাগ্যক্রমে এটি সমস্ত অজানা বিতরণে প্রদর্শিত হয় ship আমি পেয়েছি "বিশ্রী: মারাত্মক: পড়ার জন্য উত্স ফাইলটি 'ইনপ্লেস' খুলতে পারে না"GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.2)
ভোসাদড 01

6
sed  -i '1i new_text' file_name

আপনি যদি -iবিকল্পটি নির্দিষ্ট না করেন তবে এটি কোনও ত্রুটি প্রদর্শন করবে না এবং স্ট্যান্ডার্ড টার্মিনালে আউটপুট প্রদর্শন করবে তবে ফাইলটিতে পাঠ্য সন্নিবেশ করবে না।


প্রশ্নটি -iসুইচ নিয়ে নয়।
don_crissti

আপনি কিভাবে এটি চিত্র? এটা তোলে হয় প্রশ্নের উত্তর। হ্যাঁ, এটা অনুরূপ গৃহীত উত্তর, কিন্তু ঠিক একই নয়।
জি-ম্যান

@ জি-ম্যান - একটি CA গুলির দ্বারা ব্যবহৃত টেমপ্লেট পর্যন্ত আদর্শ থেকে কিন্তু সত্যিই তর্ক হতে পারে, এই অনুরূপ মত প্রায় একই ... পার্থক্য ব্যবধান এবং সত্য এই এক কোন ব্যাকস্ল্যাশ হয়েছে হচ্ছে। যতদূর আমি উদ্বিগ্ন তারা প্রযুক্তিগতভাবে অভিন্ন (যেমন তারা উভয় gnu sedনির্দিষ্ট এবং এটি কেবল ঘটে যা ব্যাকস্ল্যাশ ছাড়াই gnu sedগ্রহণ করবে i)। যদি অন্যরা মনে করে যে এটির একটি পৃথক উত্তর + একটি উত্সাহ ... ওহ ভাল rants
don_crissti

2

0aকমান্ড আপনাকে চেষ্টা করে কাজ ex, পূর্বসুরীvi :

printf '%s\n' 0a 'Anything you want to add' . x | ex file.txt

printfনিজে কমান্ড আউটপুট:

0a
Anything you want to add
.
x

0aমানে 0th লাইন পর (অর্থাত প্রথম লাইন আগে) যোগ করুন।

পরবর্তী লাইন বা একাধিক লাইন যুক্ত করতে আক্ষরিক পাঠ্য।

.উপর নিজে একটি লাইন "যোগ" কমান্ড বন্ধ।

xকারণ সাবেক ফাইল করে প্রস্থান করা পরিবর্তনগুলি সংরক্ষণ করতে।


1

আমি অবাক হই যে এই পুরানো প্রশ্নটিতে কেউ সবচেয়ে সাধারণ (এবং এক্ষেত্রে বেশ সহজ) সিড কমান্ড দেখায়নি:

$ sed  -i '1s/^/new_text\
/' file_name

যা বেশিরভাগ শেলগুলিতে কাজ করে এবং বেশ কয়েকটি সেড সংস্করণে বহনযোগ্য।
জিএনইউ শেড উপলভ্য থাকলে আপনি এটি ব্যবহার করতে পারেন:

$ sed -i '1s/^/new_text\n' file_name

পার্থক্যটি হ'ল GNU সেড \nএকটি নতুন লাইনের জন্য একটি ব্যবহারের অনুমতি দেয় এবং অন্যদের ব্যাকস্ল্যাশের পূর্বে একটি আক্ষরিক নিউলাইন প্রয়োজন (এটি জিএনইউ সেডে যেভাবেই কাজ করে)।

$'…'সিনট্যাক্স গ্রহণ করে এমন শেল যদি ব্যবহার হয় তবে আপনি সরাসরি নতুন লাইন inোকাতে পারেন, সুতরাং সেড দেখতে পাবে যে নতুন লাইনটি ইতিমধ্যে রয়েছে:

$ sed -i $'1s/^/new_text\\\n/' file_name

যা আরও সেড সংস্করণের জন্য কাজ করে।


-1

দুর্ভাগ্যক্রমে, উপরের সমস্ত উত্তর (বেশিরভাগ সহ sed) আমার পক্ষে কার্যকর হয়নি কারণ সেগুলি প্রথম লাইনে প্রতিস্থাপন করেছিল। আমি একটা Ubuntu 16.04 LTSমেশিনে আছি এখানে আমার কর্মসংস্থান GNU Awk 4.0.2:

awk '{if(NR==1){$0="NEW_FIRST_LINE"$0; print $0} ;if(NR!=1){print $0}}' file_name

1
আপনি কী সম্পর্কে কথা বলছেন তা নিশ্চিত নয় ... কেবলমাত্র একটি sedউত্তর রয়েছে যা প্রতিস্থাপন ব্যবহার করে তবে এটি বিদ্যমান লাইনটিকে প্রতিস্থাপন করে না।
don_crissti

-1

প্রথম এবং শেষ

আমি ধরে নেব যে কেউ যে কোনও ফাইলের শুরু / শেষের দিকে পাঠ্য সন্নিবেশ / সংযোজন করতে সন্ধান করেছে তাকে সম্ভবত অন্যান্যটি কীভাবে করবেন তাও জানতে হবে।

cal |                            \
  gsed -E                        \
       -e     '1i\{'             \
       -e     '1i\  "lines": ['  \
       -e 's/(.*)/    "\1",/'    \
       -e '$s/,$//'              \
       -e     '$a\  ]'           \
       -e     '$a\}'

ব্যাখ্যা

এই calআউটপুট gnu- জন্য বাঁশি বাজালাম sed(যাকে বলা হয় gsedমাধ্যমে ইনস্টল MacOS উপর brew.sh ) বাড়ানো Regex (সঙ্গে -E) এবং 6 "স্ক্রিপ্ট" প্রয়োগ ( -e) এবং লাইন বিরতি সহ পলান \পাঠযোগ্যতা জন্য। স্ক্রিপ্টগুলি 1 এবং 2 1i\"লাইন 1 এ, সন্নিবেশ করান" ব্যবহার করে। 5 এবং 6 এর স্ক্রিপ্টগুলি $a\"লাইনে <<>> সংযুক্ত করুন" এ ব্যবহার করে। কোডটি ফলাফলের মধ্যে কী প্রত্যাশা করা হয় তা উপস্থাপনের জন্য আমি উলম্বভাবে পাঠ্য আউটপুটগুলি সারিবদ্ধ করেছি। স্ক্রিপ্ট 3 এবং 4 বিকল্পগুলি করে (পরে কেবলমাত্র "লাইন <<>" এ প্রয়োগ হয়)। ফলাফলটি কমান্ড আউটপুটকে বৈধ JSON এ রূপান্তর করছে।

আউটপুট

{
  "lines": [
    "    October 2019      ",
    "Su Mo Tu We Th Fr Sa  ",
    "       1  2  3  4  5  ",
    " 6  7  8  9 10 11 12  ",
    "13 14 15 16 17 18 19  ",
    "20 21 22 23 24 25 26  ",
    "27 28 29 30 31        ",
    "                      "
  ]
}

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