কীভাবে কোনও ফাইলে একাধিক লাইন যুক্ত করা যায়


301

আমি কোনও ফাইল সন্ধানের জন্য বাশ স্ক্রিপ্ট লিখছি যদি এটি উপস্থিত না থাকে তবে এটি তৈরি করুন এবং এটি এতে যুক্ত করুন:

Host localhost
    ForwardAgent yes

সুতরাং "line then new line 'tab' then text"আমি এটি একটি সংবেদনশীল বিন্যাস মনে করি। আপনি এটা করতে পারেন আমি জানি:

cat temp.txt >> data.txt

তবে এটি দুটি লাইন থেকেই অদ্ভুত বলে মনে হচ্ছে। এই বিন্যাসে এটিকে যুক্ত করার কোনও উপায় আছে:

echo "hello" >> greetings.txt

উত্তর:


526
# possibility 1:
echo "line 1" >> greetings.txt
echo "line 2" >> greetings.txt

# possibility 2:
echo "line 1
line 2" >> greetings.txt

# possibility 3:
cat <<EOT >> greetings.txt
line 1
line 2
EOT

যদি ফাইলটিতে লেখার জন্য sudo (অন্যান্য ব্যবহারকারীর সুবিধাগুলি) প্রয়োজন হয় তবে এটি ব্যবহার করুন:

# possibility 1:
echo "line 1" | sudo tee -a greetings.txt > /dev/null

# possibility 3:
sudo tee -a greetings.txt > /dev/null <<EOT
line 1
line 2
EOT

2
@ দ্য লিজেন্ড যেটিকে "এখানে নথি" বলা হয়। ম্যান পৃষ্ঠাতে এই অনুচ্ছেদটি দেখুন।
হউক লেগেইজ

1
আরও একটি সম্ভাবনা হ'ল ( echo "line 1" ; echo "line 2" ) >>greetings.txt
অট--

2
@ অট-- আপনার সত্যিকারের সাবশেলের দরকার নেই (অর্থাত্ একটি নতুন প্রক্রিয়া সংরক্ষণ করতে পারেন) এটি যথেষ্ট:{ echo "line 1" ; echo "line 2"; } >>greetings.txt
হউক লিগিং ২

2
EOT এবং EOL এর মধ্যে পার্থক্য কি?
সিকাতোমো

15
@cikatomo সালে মাত্র একটি র্যান্ডম স্ট্রিং। হতে পারে । cat <<EOTEOTcat <<FOO
হাউক লেগেইন

60
printf '%s\n    %s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt

অথবা, এটি যদি আপনি চান তবে আক্ষরিক ট্যাব (আপনার প্রশ্নের চারটি স্থানের চেয়ে):

printf '%s\n\t%s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt

আপনি একই প্রভাবটি অর্জন করতে পারেন echoতবে বাস্তবায়ন থেকে বাস্তবায়নের ক্ষেত্রে ঠিক কীভাবে পরিবর্তিত হয়, যেখানে printfস্থির থাকে।



16

আরেকটি পন্থা ব্যবহার করা হয় tee

tee -a ~/.ssh/config << END
Host localhost
  ForwardAgent yes
END

teeম্যান পৃষ্ঠা থেকে কয়েকটি পছন্দের লাইন :

টি ইউটিলিটি স্ট্যান্ডার্ড ইনপুটটিকে স্ট্যান্ডার্ড আউটপুটে অনুলিপি করে শূন্য বা আরও বেশি ফাইলে একটি অনুলিপি তৈরি করে।

-a - ফাইলগুলিকে ওভাররাইট না করে আউটপুট যুক্ত করুন।


6

এসইডি একটি ফাইলের শেষে একটি লাইন যুক্ত করতে পারে:

sed -i '$ a text to be inserted' fileName.file
$ফাইলের শেষ নির্বাচন করে, aএটি সংযোজন করতে বলে, এবং এর পরে পাঠ্যটি প্রবেশ করানো হবে। তারপরে অবশ্যই ফাইলের নাম।


সূত্র: http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html

========= সম্পাদনা == ===========

অন্যান্য পদ্ধতির তুলনায় এই পদ্ধতির কোনও অতিরিক্ত সুবিধা রয়েছে কি?
হ্যাঁ, এই পদ্ধতির কোনও অনুসন্ধানে ফিরে আসা কোনও ফাইলগুলিতে সংযোজনের অতিরিক্ত সুবিধা রয়েছে যেমন: find . -name "*.html" -exec sed -i '$ a </html>' {} \;

আমি শেষের এইচটিএমএল ট্যাগ সন্নিবেশ করানোর জন্য উপরের উদাহরণটি ব্যবহার করেছি যা বেশিরভাগ ডিরেক্টরিতে প্রতিটি HTML পৃষ্ঠায় অনুপস্থিত ছিল।

===================================


1
আপনি যদি কোনও ফাইলে একাধিক লাইন যুক্ত করার বাক্য গঠন দেখান, তবে এটি প্রশ্নের উত্তর হবে (যদিও এটি খুব কার্যকর নয়)। অন্যান্য সমস্ত উত্তর কেবল নতুন পাঠ্য লিখুন। এই উত্তরটি পুরো ফাইলটি পড়বে এবং এটিকে আবারও লিখবে, যোগ করা পাঠ্যটিও। এই পদ্ধতির অন্যের তুলনায় কোনও উপকার আছে?
জি-ম্যান

এটি কেবল জিএনইউতে কাজ করে sed। বাসদ sedত্রুটি সহ জামিন: command a expects \ followed by text। সুতরাং এটি কোনও স্ক্রিপ্টযুক্ত সমাধানের জন্য ব্যবহার করবেন না; এটা ভাঙ্গা দায়বদ্ধ। (অথবা এটা সঠিকভাবে কি হিসাবে বাসদ প্রয়োজনীয় সিনট্যাক্স POSIX সামঞ্জস্যপূর্ণ এবং গনুহ কাজ করবে sedহিসাবে ভাল।
ওয়াইল্ডকার্ড

অন্যান্য উত্তরের সঙ্গে ব্যবহার করা যেতে পারে findনিম্নরূপ: find . -name "*.txt" -exec sh -c 'printf "%s\n\t%s\n" "Host localhost" "ForwardAgent yes" >> "$1"' sh {} ";"
জি-ম্যান

1
এটি একটি খুব ভাল সমাধান, কারণ এটি স্ট্রিম পুনঃনির্দেশ ( >, >>) করে না এবং এভাবে দৌড়ানোর মতো সমস্যায় ভুগছে না sudo echo 'something' > /file। আমার জন্য তা পুরোপুরি যে ভালো lxd কন্টেইনারে একটি ফাইলে একটি লাইন যোগ করতে পারবেন: lxc exec c sed -- '$ a newline' /myfile
ড্রাকো আটার 19 ই

echo "a new line" >> foo.fileনতুন লাইন কখন ফাইলটি নতুন লাইন শেষ হয় না, কিন্তু তৈরী করবে না sed -i '$ a a new line' foo.fileকি করতে হবে, তাই sedবিশেষ করে আপনি সবসময় ফাইলের একটি নতুন লাইন যোগ চান উত্তম।
zhouji

1

আমি সেড ব্যবহার করেছি কারণ এটি সুডোর সাথে ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ:

sudo sed -i '$ a text to be inserted' fileName.file 

বিকল্পটি খুব কুরুচিপূর্ণ:

sudo bash -c "echo a text to be inserted >> fileName.file"  

এমনকি ssh এর সাথে সম্পন্ন করার পরেও কৃপণকর।


1
কেন এই উত্তরকে নিম্নমান দেওয়া হয়েছিল? এটি আমার প্রয়োজনীয় সমাধানের মতো দেখায়। এটিতে কোনও সমস্যা আছে? যদি তা না হয় তবে আমি এটি ব্যবহার করব এবং এটির উপরে নজর রাখব।
মাউন্টেনএক্স

আপনার sed -iযুক্তি হিসাবে কোনও এক্সটেনশন নেয় না? আপনার উদাহরণে ভুল পরামিতি থাকতে পারে।
প্রোটোমেটা

1

অন্য একটি লাইনার হ'ল:

echo "Greetings 1" >> greetings.txt && echo "Greetings 2" >> greetings.txt

আমি -eবিকল্পটি চিন্তার পছন্দ করবো , কারণ এটি আরও নিয়ন্ত্রণ দেয়:

echo -e "Greeting 1\nGreetings 2\n" >> greetings.txt

1

cat >> out.txtএকই প্রভাব অর্জনের জন্য পার্ল বা পাইথনের যে কোনও একটি দিয়ে অনুকরণ করা যায়। পার্ল:

perl -e 'open(fh,">>","./out.txt");while(<>){printf(fh "%s",$_)};close(fh);'

এবং পাইথন:

python -c 'import sys;f=open(sys.argv[1],"a");l=[i for i in sys.stdin];f.write("".join(l))' out.txt 

মনে রাখবেন অজগরটির জন্য আপনাকে দু'বার Ctrl+ আঘাত করতে হবে D। আরও তথ্যের জন্য স্ট্যাকওভারফ্লো সম্পর্কিত সম্পর্কিত প্রশ্ন দেখুন ।


1

এখানে একটি ফাইলে একাধিক লাইন যুক্ত করার উদাহরণ রয়েছে:

{
        echo '  directory "/var/cache/bind";'
        echo '  listen-on { 127.0.0.1; };'
        echo '  listen-on-v6 { none; };'
        echo '  version "";'
        echo '  auth-nxdomain no;'
        echo '  forward only;'  
        echo '  forwarders { 8.8.8.8; 8.8.4.4; };'
        echo '  dnssec-enable no;'
        echo '  dnssec-validation no;'
} >> your_file.txt

0

প্রধান উত্তরের পাশাপাশি, ফাইলটির জন্য সুপার ব্যবহারকারীর অনুমতি প্রয়োজন হলে কেবল sudoসামনে যোগ করা echoকাজ করবে না।

এটি কারণ শেল কমান্ডগুলি ভেঙে দেয় এবং যদিও echoএটি রুট হিসাবে চালিত হয়েছিল, তবে >>সাধারণ সুবিধাগুলি নিয়ে চলে ran

এটি সুপার ব্যবহারকারীর জন্য কাজ করবে: sudo su -c "echo 'Line 3' >> greetings.txt"


আপনার suএখানে দরকার নেই ( sudo suভাল নয়)। তবে আপনি ঠিক বলেছেন যে শেল পুনর্নির্দেশ পরিচালনা করতে আপনার কিছু দরকার; সম্ভবত sudo sh -c "echo stuff >> file.txt"। নেট সাশ্রয় নয় বরং একটি ভাল অনুশীলন।
রোয়াইমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.