কমান্ড লাইনটি ব্যবহার করে আমি কোনও পাঠ্য ফাইলের শীর্ষে একটি লাইন কীভাবে সন্নিবেশ করব?


25

আমি ইতিমধ্যে বিদ্যমান ফাইলের শীর্ষে পাঠ্য সন্নিবেশ করতে চাই। আমি কীভাবে এটি অর্জন করতে পারি। আমি চেষ্টা echoএবং teeকিন্তু সফল হয়নি।

আমি sources.listটার্মিনাল থেকে ফাইলের শীর্ষে রেপো লাইন toোকানোর চেষ্টা করছিলাম ।

বিঃদ্রঃ

আমার এক লাইনের দ্রুত সমাধান প্রয়োজন, কারণ অন্য উত্তরের পদ্ধতিটি আমার কাছে ইতিমধ্যে জানা ছিল


1
টি ফাইলের নীচে একটি লাইন যুক্ত করে উদাহরণস্বরূপ echo "deb http://extras.ubuntu.com/ubuntu precise main" | sudo tee -a /etc/apt/sources.list- অ্যাডমিন সুবিধা পেতে টি-র আগে আপনারও সুডোর প্রয়োজন। তবে কেন পৃথিবীতে আপনি সোর্স.লিস্টের একেবারে শীর্ষে কিছু যুক্ত করতে চান?
সাভাস রাদেভিক

2
@ মিডিজেক: কোথাও ওপি-র প্রশ্ন ইতিহাসে আপনি কোনও সিডি-রেপো থেকে ইনস্টল / আপডেট করার বিষয়ে কিছু খুঁজে পাবেন ... আমি সন্দেহ করি যে কারণটি হতে পারে ...
ইশ

ধন্যবাদ @ আইজেক্স, আপনার অনুমানটি সঠিক। আমি শান্ত মুগ্ধ। আপনি কি এই প্রশ্নের উত্তর দিতে পারেন? এটি ছিল সফটওয়্যার-কেন্দ্র ব্যবহার করে স্থানীয় রেপো থেকে ইনস্টল করার এবং আমার স্থানীয় রেপোটিকে শীর্ষে না রেখে সর্বোচ্চ অগ্রাধিকারের জন্য সেট করার বিষয়ে। আবার ধন্যবাদ.
আনোয়ার

1
@ আইজএক্স, আমার স্থানীয় সংগ্রহস্থলে সর্বোচ্চ অগ্রাধিকার স্থাপনের লিঙ্কটি এখানে । আপনি যদি সফ্টওয়্যার কেন্দ্র সম্পর্কে এই প্রশ্নটি পরীক্ষা করতে পারেন তবে আমি খুশি হব । আপনার প্রথম মন্তব্যের জন্য আবার ধন্যবাদ। খুব আনন্দিত ছিল।
আনোয়ার

1
@ মিডিজেক, আপনি এই ধরনের অস্বাভাবিক প্রশ্নের ব্যাখ্যার জন্য এই প্রশ্নটি দেখতে পারেন ।
আনোয়ার

উত্তর:


38

এটি এর সাথে আসলে বেশ সহজ sed:

  • sed -i -e '1iHere is my new top line\' filename

  • 1iসেডকে ফাইলের 1 লাইনে নিম্নলিখিত পাঠ্যটি সন্নিবেশ করতে বলে; \নতুন লাইনটি শেষে ভুলে যাবেন না যাতে বিদ্যমান লাইন 1 টি 2 লাইনে স্থানান্তরিত হয়।


1
ধন্যবাদ। কেবলমাত্র নোটের জন্য: আপনি যদি sআই-এর পরিবর্তে ব্যবহার সন্নিবেশ না করে প্রতিস্থাপন করতে চান 1i
আনোয়ার

3
দুঃখজনকভাবে এটি খালি ফাইলের জন্য ব্যর্থ হয় (এটির কোনও মুষ্টি রেখা নেই, সুতরাং সেড কখনও সন্নিবেশ করায় না)।
টিনো

@ টিনো খালি ফাইলগুলির জন্য আপনি কেবল ব্যবহার করতে পারেনecho "Text Here" >> Filename
ফ্লোটলক

ম্যাকস 10
কৃষ্ণ

7

একটি স্ক্রিপ্ট সহ জায়গার সাধারণ এডিটিং সালে চতুর, কিন্তু আপনি ব্যবহার করতে পারেন echoএবং catতারপরmv

echo "fred" > fred.txt
cat fred.txt t.txt >new.t.txt
# now the file new.t.txt has a new line "fred" at the top of it
cat new.t.txt
# can now do the rename/move
mv new.t.txt t.txt

তবে আপনি যদি সোর্স.লিস্টের সাথে খেলছেন তবে ত্রুটিগুলি সনাক্ত করতে আপনাকে কিছু বৈধতা এবং বুলেট-প্রুফিং যুক্ত করতে হবে কারণ আপনি সত্যই এটিকে ছাড়তে চান না। তবে এটি একটি পৃথক প্রশ্ন :-)


আমি ইতিমধ্যে এটি করতে পারেন। আমার যেমন izx দিয়েছে তেমন একটি লাইন সমাধান দরকার। তবে আপনার উত্তরের জন্য ধন্যবাদ।
আনোয়ার

1
@ আনোয়ারশাহ - আহা দুঃখিত! আপনার উচিত ছিল যে আপনার প্রশ্নে :-)
সান

আমি স্বীকার করি, আপনার উত্তর এবং মন্তব্য করার জন্য +1। (আমি আরও দিতে পারি না)
আনোয়ার

6
./prepend.sh "myString" ./myfile.txt

আমার কাস্টম শেলprepend এটি পরিচিত :

#!/bin/sh
#add Line at the top of File
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi

একটি আপেক্ষিক পথ বা পরম পাথও ব্যবহার করুন, এটি ভাল কাজ করা উচিত:

./prepend.sh "my New Line at Top"  ../Documents/myfile.txt

হালনাগাদ :

আপনি যদি এটির জন্য একটি স্থায়ী স্ক্রিপ্ট চান nano /etc/bash.bashrcতবে ফাইলের শেষে এই ফাংশনটি খুলুন :

function prepend(){
# @author Abdennour TOUMI
if [ -e $2 ]; then
    sed -i -e '1i$1\' $2
fi

}

আপনার টার্মিনালটি আবার খুলুন এবং উপভোগ করুন:

prepend "another line at top" /path/to/my/file.txt

5

এবং কেন এটির জন্য একটি আসল পাঠ্য সম্পাদক ব্যবহার করবেন না? এড হ'ল মানক পাঠ্য সম্পাদক।

ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'

অথবা, আপনি যদি আদেশগুলি আরও পঠনযোগ্য হতে চান:

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
  • 1: ফার্স্টলাইনে যান
  • i: সন্নিবেশ মোড
  • আপনার জিনিস আপনি সন্নিবেশ করতে চান ...
  • .: সন্নিবেশ বন্ধ করুন, সাধারণ মোডে ফিরে যান
  • wq: লিখুন এবং ছেড়ে দিন, আপনাকে ধন্যবাদ, বিদায়।

এটির সাহায্যে কীভাবে শেল ভেরিয়েবল বিকল্প ব্যবহার করা যায় FIRST LINE?
vp_arth

1
@vp_arth যদি আপনার সামগ্রী পরিবর্তনশীল হয় first_lineতারপর: ed -s filename < <(printf '%s\n' 1i "$first_line" . wq)। ভেরিয়েবলটি একটি বিন্দুতে প্রসারিত না হয় এবং কোনও নতুন লাইন অক্ষর না থাকে তা নিশ্চিত করুন (সুতরাং এটি ব্যবহারকারী ইনপুট থেকে আসে তবে স্যানিটাইজ করুন)।
gniourf_gniourf

3

সবসময় awkবিকল্প আছে। stringআপনার বিষয়বস্তু সঙ্গে পরিবর্তনশীল প্রতিস্থাপন । যদিও এটি কোনও স্থানে পরিবর্তন নয়। ব্যক্তিগতভাবে, আমি স্থান পরিবর্তন না করার ঝোঁক। এটি অবশ্যই একটি ব্যক্তিগত পছন্দ। দুটি জিনিস, -vawk এর মধ্যে একটি ভেরিয়েবলকে চিহ্নিত করে এবং nকার্যকরভাবে একটি লাইন সংখ্যার সাথে মেলে এখানে ভেরিয়েবল ব্যবহার করা হয় NR == 1। আপনি শুধু মান পরিবর্তন করে উপায়ে যে কোন সংখ্যার মধ্যে এই ব্যবহার করতে পারে nএবং s

string="My New first line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}'     file.source > file.target

উদাহরণ:

% cat file.source                                                                                                                                      

First Line
Second Line
Third Line

% string="Updated First Line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target; cat ./file.target                      !698

Updated First Line
First Line
Second Line
Third Line

2

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

ex -sc '1i|hello world' -cx sources.list
  1. 1 1 ম লাইন নির্বাচন করুন

  2. i পাঠ্যের নতুন লাইন .োকান

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


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