বিড়াল কমান্ডে একটি ফাইলের সাথে একটি লাইন যুক্ত করা?


11

আমি cat file.txtকোনও ফাইলের বিষয়বস্তু পেতে করতে পারি তবে আমি নিজের পছন্দের একটি চূড়ান্ত লাইনে চেষ্টা করতে চাই।

আমি পাইপিংয়ের চেষ্টা করেছি (cat file.txt ; echo "My final line") |তবে পাইপটি দিয়ে কেবল চূড়ান্ত লাইনটি পাস হচ্ছে। আমি কীভাবে বিড়াল এবং চূড়ান্ত লাইনে যোগদান করতে পারি?

একটি স্পষ্টতার জন্য সম্পাদনা করুন: আমি নিজেই ফাইলটি পরিবর্তন করতে চাই না। আমি সচেতন যে আমি কাজ করতে পারে যদি এই ক্ষেত্রে ছিল am echo "My final line" >> file.txtবা echo "My final line" | tee -a file.txtকিন্তু আমি শুধুমাত্র এই বিশেষ কমান্ডের অনুষঙ্গের মধ্যে পরিশেষে যোগ করতে তাই আমি এর সংযুক্তকরণের মধ্যে নল করতে পারেন চেষ্টা করছি file.txtএবং "My final line"


1
এরকম কিছু হতে পারে echo "My final line" >> file.txt?
এডউইনকস্ল 14

কমান্ড / পাইপিংয়ের মধ্যে আমি আসলে ফাইলের সাথে লাইনটি যুক্ত করতে চাই না। আমি ইতিমধ্যে জানি যে আমি >>নিজেই ফাইলটি সম্পাদনা করতে চাইলে আমি লাইনটি যুক্ত করতে পারি।
ডাবলবাস

11
আপনি কি দুর্ঘটনাক্রমে মুছে ফেলেছেন file.txt? আপনার পাইপ স্নিপেট কাজ করা উচিত।
ব্র্যাকেন

@ ডাবলবাস: ম্যাথিউ মিচেলের উত্তর আরও ভাল, কারণ এটি ফাইলটি মেমোরি বা ডিস্কে পরিবর্তন করে না, বরং বিল্ট-ইন কমান্ডের একটি বৈশিষ্ট্য ব্যবহার করে।
ব্রায়ান বোয়েচার

উত্তর:


30

আপনি catএটি অর্জনের জন্য একাধিক ফাইলগুলি পড়ার ক্ষমতাটির সাথে মিলিত স্টিডিন থেকে পড়ার দক্ষতা অর্জন করতে পারেন।

~$ cat file.txt
Hello from file.txt

~$ echo "My final line" | cat file.txt -
Hello from file.txt
My final line

আপনি যেমন একটি লাইনও পূর্বে পরিশোধ করতে পারেন:

~$ echo "My final line" | cat - file.txt
My final line
Hello from file.txt

মনে রাখবেন যে আপনি একটি লাইনেই সীমাবদ্ধ নন। catস্টিডিন থেকে এটি ইওএফ পৌঁছানো পর্যন্ত পড়বে। আপনি আউটপুটটি curlপাসওয়ার্ড করতে পারেন , উদাহরণস্বরূপ, এর আউটপুটটিকে সংশোধন বা সংযোজন করতে cat

~$ curl -s http://perdu.com | cat file.txt -
Hello from file.txt
<html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes ici</pre></strong></body></html>

1
(cat file.txt ; echo "My final line") | …এটা করতে হবে। তবে catএটির জন্য যা ডিজাইন করা হয়েছিল তার জন্য ব্যবহার করা ভাল +1।
ctrl-alt-delor

@ সিটিআরএল-ওএল-ডেলর: সাব-শেলগুলির কাঁটাচামচ করার জন্য একটি অতিরিক্ত প্রক্রিয়াটির অসুবিধাও রয়েছে যা তুলনামূলকভাবে ব্যয়বহুল। উদাহরণস্বরূপ echo "$$" "$BASHPID" | head -q -n 1 /proc/mounts - | catবনাম ( head -q -n 1 /proc/mounts; echo "$$" "$BASHPID" ) | catবা এমনকি চেষ্টা করুন { head -q -n 1 /proc/mounts; echo "$$" "$BASHPID"; } | cat
ডেভিড ফোস্টার 12

11

কোনও ফাইলে একটি লাইন যুক্ত করার জন্য, আপনি কেবল শেল অ্যাপেন্ড পুনঃনির্দেশ অপারেটর ব্যবহার করতে পারেন, >>(ফাইলটি পতাকা open(2)সহিত হবে O_APPEND):

echo 'My final line' >>file.txt

এখন, আপনি যদি কেবল চূড়ান্ত লাইন সংযুক্ত করে ফাইলটির বিষয়বস্তু দেখতে চান তবে আমি catদুটি যুক্তি দিয়ে ব্যবহার করব :

  • প্রথমে আপনার ফাইলটি অবশ্যই স্পষ্টভাবে বলুন file.txt
  • দ্বিতীয় যুক্তিটি হ'ল আপনার পছন্দের স্ট্রিং এবং ফাইলের নাম হিসাবে স্ট্রিংটি পাস করার জন্য ( catকেবলমাত্র ফাইলগুলির সাথে সম্পর্কিত হিসাবে ) আপনি প্রক্রিয়াটির বিকল্পটি উপকার করতে পারবেন <(), যা কোনও ফাইল বর্ণনাকারীকে ফিরিয়ে দেয় ( /proc/self/fd/<fd_number>)

এগুলি একত্র করা:

cat file.txt <(echo 'My final line')

আপনি যদি আউটপুটটি পেজড করতে চান তবে ধরে lessনেওয়া আপনার প্রিয় পেজার:

less file.txt <(echo 'My final line')

<()বাশের জন্য কাজ করে, তবে এটি অন্যান্য শাঁসের জন্য কী কাজ করে? Ksh? ড্যাশ?
jpaugh

1
@ জেপফো ksh, zsh- হ্যাঁ dash- না
হিমাইল

এটি আসলটি পরিবর্তন করে।
ctrl-alt-delor 21

11
sed -e '$aMy final line' file.txt

man sedঅপশন থেকে-e

-e script, --expression=script
    add the script to the commands to be executed

$শেষ লাইনের সাথে মেলে এবং aস্ট্রিং সংযোজন করে।

আপনি যদি স্থায়ীভাবে ফাইলটিতে লাইন যুক্ত করতে চান তবে ব্যবহার করুন -i

-i[SUFFIX], --in-place[=SUFFIX]
    edit files in place (makes backup if SUFFIX supplied)

কমান্ডটি পরিবর্তন করা হচ্ছে

sed -i -e '$aMy final line' file.txt

1
একক উদ্ধৃতি ব্যবহার করুন এবং আপনার ব্যাকস্ল্যাশ লাগবে না।
ওয়াইল্ডকার্ড

7

এটি ইতিমধ্যে প্রশ্নের মন্তব্যে পরিষ্কার করা হয়েছিল, তবে এটি এখানে উত্তর হিসাবে আবার যুক্ত করেছে।

প্রশ্নে উল্লেখ করা কমান্ড,

(cat file.txt ; echo "My final line") | other command

প্রত্যাশিত হিসাবে কাজ করে - প্রথম বন্ধনী দ্বারা গঠিত সাব-শেল থেকে সমস্ত আউটপুট দ্বিতীয় কমান্ডে পাইপ করা হয়।

যদি ফাইলটি কোনও নতুন লাইনের সাথে শেষ না হয় তবে প্রতিধ্বনিত স্ট্রিংটি শেষ লাইনে যুক্ত হবে - এটি অন্য সমস্ত সমাধানের সাথে এখানে সাধারণ এবং এর আগে অন্য কোনও (খালি) প্রতিধ্বনি যুক্ত করে সমাধান করা যেতে পারে।


1
ফাইল একটি newline দিয়ে শেষ হয় না, তবে আমি ব্যবহার করতে চাই awk: awk 1 file.txt; echo "My final line"awk 1 fileফাইলটির শেষে ইওল অনুপস্থিতের ক্ষতিপূরণ দেওয়ার জন্য একটি দুর্দান্ত কৌশল।
مورু

যদি ফাইলটি কোনও নতুন লাইনের সাথে শেষ না হয় তবে আপনি কেবল echo "\nMy final line"নির্ভর করতে নাও ব্যবহার করতে পারেনawk
ফ্রেগ্যান্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.