বাশ ব্যবহার করে টেক্সট ফাইলে ডেটা খুলুন এবং লিখবেন?


247

লিনাক্সের শেল স্ক্রিপ্টিং দ্বারা আমি কীভাবে কোনও পাঠ্য ফাইলে ডেটা লিখতে পারি?

আমি ফাইলটি খুলতে সক্ষম হয়েছি। তবে আমি কীভাবে এটিতে ডেটা লিখতে জানি না।

উত্তর:


410
echo "some data for the file" >> fileName

7
এই অপারেটরের নাম কী? আমি এটি সম্পর্কে একটি ম্যানুয়াল পেতে চাই।
ভ্লাদ টি।

96
অপারেটর> যদি কোনও উপস্থিত থাকে তবে ফাইলটিকে ওভাররাইটিং করে কোনও ফাইলে আউটপুট পুনঃনির্দেশ করে। >> একটি বিদ্যমান ফাইলে সংযুক্ত হবে।
ত্রিটন ম্যান

4
আপনাকে ধন্যবাদ, উইকি পৃষ্ঠার লিঙ্কটি এখানে, যদি কারও এটির প্রয়োজন হয় en.wikedia.org/wiki/…
ভ্লাদ টি।

11
আপনার যদি রুট সুবিধাগুলি সহ এটি করার দরকার হয় তবে এটি এইভাবে করুন:sudo sh -c 'echo "some data for the file" >> fileName'
লুকাশেরাত

1
আমার টেক্সট ভালো কিছু কি যদি এই এবং যে কোনও কারণে, আমি ব্যবহার করতে পারবেন না curlবা wget?
অ্যাসডসামি

145
#!/bin/sh

FILE="/path/to/file"

/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.
The keyword EOM can be any text, but it must start the line and be alone.
 EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4 
EOM

1
মাল্টলাইন আউটপুট নেওয়ার জন্য দুর্দান্ত।
ফেদারিকো জাঙ্কান

8
এই ফাইলটি নিয়ে ঠিক কী করা উচিত তা জেনে নবাবিরা উপকৃত হবে। এটা কিভাবে সংরক্ষণ করতে, কিভাবে এটি চালানোর জন্য, ইত্যাদি
ড্যানি

14
কেবল কোডের টুকরো না রেখে ব্যাখ্যা করুন। এটি এটিকে সবার জন্য আরও বেশি সহায়ক করে তোলে - বিশেষত নবাগত শিশু।
ক্যাস্পার বি। হ্যানসেন

2
এক্ষেত্রে ভেরিয়েবলের সাথে স্ক্রিপ্টগুলি _ কিছু_ভর হারিয়ে যায়। কীভাবে এটি স্থির করা যায়?
এট্রুবকা


60

আপনি কোনও আদেশের আউটপুট কোনও ফাইলে পুনর্নির্দেশ করতে পারেন:

$ cat file > copy_file

অথবা এটিতে সংযোজন করুন

$ cat file >> copy_file

আপনি যদি সরাসরি লিখতে চান তবে কমান্ডটি হ'ল echo 'text'

$ echo 'Hello World' > file

3
: আপনি রুট অনুমতির প্রয়োজন তাহলে sudo sh -c 'cat file > /etc/init/gunicorn.conf'(উপরে lukaserat এর মন্তব্যের ধন্যবাদ)
Aero

46
#!/bin/bash

cat > FILE.txt <<EOF

info code info 
info code info
info code info

EOF 

38
আপনার কোডটির ব্যাখ্যা অন্যদের কাছে এটি আরও ব্যবহারযোগ্য করে তোলার দিকে অনেক বেশি এগিয়ে যাবে। এমনকি "এখানে নথি" এবং "পুনর্নির্দেশ" এর মতো শব্দাবলীর কলআউটগুলি অনুসন্ধানকারীদের অন্যান্য সংস্থানগুলিতে নির্দেশ করতে পারে।
পালপতিম

2
এর মতো কোনও কিছুর জন্য ব্যাখ্যা এতটা প্রয়োজনীয় নয়।
ভার্গব নানেকালভা

6
যখন আপনি ইতিমধ্যে উত্তরটি জানেন তখন কখনই ব্যাখ্যা প্রয়োজন হয় না। আমার কাছে উপরের কোডটি তথ্যের অভাবে কার্যকর নয়।
সেরেন উলিডিটজ


1
ইওএফের পরে - কোনও ফাঁকা জায়গা থাকা উচিত।
Светлов

24

আমি জানি এটি একটি জঘন্য পুরাতন প্রশ্ন, তবে ওপি যেমন স্ক্রিপ্টিং সম্পর্কিত, এবং গুগল আমাকে এখানে এনেছে, একই সাথে পড়া এবং লেখার জন্য ফাইল বর্ণনাকারী খোলার বিষয়টিও উল্লেখ করা উচিত।

#!/bin/bash

# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt

    # Let's print some text to fd 3
    echo "Roses are red" >&3
    echo "Violets are blue" >&3
    echo "Poems are cute" >&3
    echo "And so are you" >&3

# Close fd 3
exec 3>&-

তারপর cat টার্মিনালে ফাইলটি

$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you

এই উদাহরণটি ফাইলের কবিতা.টিএসটিএসটি ফাইল ডেস্ক্রিপ্টর 3 পড়তে এবং লেখার জন্য উন্মুক্ত করে তোলে এটি এটিও দেখায় যে * নিক্স বাক্সগুলি আরও fd এর তত্ক্ষণাত কেবল স্টিডিন, স্টডআউট এবং স্টেডার (fd 0,1,2) জানে। এটি আসলে অনেক কিছু ধরে রাখে। সাধারণত কার্নেল বরাদ্দ করতে পারে এমন ফাইল বর্ণনাকারীর সর্বাধিক সংখ্যক সন্ধান করা যেতে পারে/proc/sys/file-max বা /proc/sys/fs/file-max9 এর উপরে যে কোনও fd ব্যবহার করা বিপজ্জনক কারণ এটি শেল দ্বারা অভ্যন্তরীণভাবে ব্যবহার করা fd এর সাথে বিরোধ করতে পারে conflict সুতরাং বিরক্ত করবেন না এবং কেবল fd এর 0-9 ব্যবহার করুন। বাশ স্ক্রিপ্টে আপনার যদি আরও 9 ফাইল বর্ণনাকারীর প্রয়োজন হয় তবে আপনার অন্যভাবে অন্য ভাষা ব্যবহার করা উচিত :)

যাইহোক, এফডি এর আকর্ষণীয় উপায়ে ব্যবহার করা যেতে পারে।


14

আমি এই উত্তরটি পছন্দ করি:

cat > FILE.txt <<EOF

info code info 
...
EOF

তবে পরামর্শ দেবে cat >> FILE.txt << EOF আপনি ইতিমধ্যে যা আছে তা মুছে না দিয়ে কেবল ফাইলের শেষের দিকে কিছু যুক্ত করতে চান কিনা

এটার মত:

cat >> FILE.txt <<EOF

info code info 
...
EOF

1
এই উত্তরটি কীভাবে বর্তমান সমস্যা সমাধানে
ওপিকে

9

উত্তর হিসাবে আমার মন্তব্য সরানো, @lycono দ্বারা অনুরোধ হিসাবে

আপনার যদি রুট সুবিধার সাথে এটি করার দরকার হয় তবে এটি এইভাবে করুন:

sudo sh -c 'echo "some data for the file" >> fileName'

6
আপনি কেবল স্ট্রিং মুদ্রণের জন্য কোনও রুট শেল চালনা এড়াতে চাইতে পারেন। echo "some data for the file" | sudo tee -a fileName >/dev/nullকেবল teeরুট হিসাবে চালানোর চেষ্টা করুন ।
ট্রিপলি

6

পরিবেশগুলির জন্য যেখানে এখানে নথিগুলি অনুপলব্ধ রয়েছে ( Makefile, Dockerfileইত্যাদি) আপনি প্রায়শই printfযুক্তিসঙ্গতভাবে সুস্পষ্ট ও দক্ষ সমাধানের জন্য ব্যবহার করতে পারেন ।

printf '%s\n' '#!/bin/sh' '# Second line' \
    '# Third line' \
    '# Conveniently mix single and double quotes, too' \
    "# Generated $(date)" \
    '# ^ the date command executes when the file is generated' \
    'for file in *; do' \
    '    echo "Found $file"' \
    'done' >outputfile

1
আপনার উপরের মন্তব্যটি "ফাইলটির জন্য কিছু ডেটা" প্রতিধ্বনিত করে দেখুন sudo tee -a fileName> / dev / নালটি কেবল টি হিসাবে রুট হিসাবে চালাতে। সত্যিই দরকারী ছিল!
কোজো

5

আমি ভেবেছিলাম কয়েকটি পুরোপুরি সূক্ষ্ম উত্তর আছে তবে সমস্ত সম্ভাবনার সংক্ষিপ্তসার নেই; এইভাবে:

এখানে বেশিরভাগ উত্তরের পিছনে মূল অধ্যক্ষ হ'ল পুনঃনির্দেশ । দুটি ফাইলগুলিতে লেখার জন্য গুরুত্বপূর্ণ পুনর্নির্দেশ অপারেটর:

পুনর্নির্দেশ আউটপুট:

echo 'text to completely overwrite contents of myfile' > myfile

পুনঃনির্দেশিত আউটপুট যুক্ত করা হচ্ছে

echo 'text to add to end of myfile' >> myfile

এখানে নথি

অন্যরা উল্লিখিত, যেমন স্থির ইনপুট উত্সের পরিবর্তে echo 'text', আপনি একটি "এখানে নথি" এর মাধ্যমে ফাইলগুলিতে ইন্টারেক্টিভভাবে লিখতেও পারেন, যা উপরের ব্যাশ ম্যানুয়ালটির লিঙ্কেও বিস্তারিত রয়েছে। সেই উত্তরগুলি, যেমন

cat > FILE.txt <<EOF অথবা cat >> FILE.txt <<EOF

একই পুনঃনির্দেশ অপারেটরগুলি ব্যবহার করুন, তবে "এখানে নথিগুলি" এর মাধ্যমে অন্য স্তর যুক্ত করুন। উপরের সিনট্যাক্সে, আপনি আউটপুট মাধ্যমে FILE.txt এ লিখবেনcat । ইন্টারেক্টিভ ইনপুটকে কিছু নির্দিষ্ট স্ট্রিং দেওয়ার পরে এই লিখনটি স্থান নেয়, এই ক্ষেত্রে 'ইওএফ', তবে এটি কোনও স্ট্রিং হতে পারে, যেমন:

cat > FILE.txt <<'StopEverything' অথবা cat >> FILE.txt <<'StopEverything'

ঠিক পাশাপাশি কাজ করবে। এখানে নথিগুলি বিভিন্ন বিযুক্তকারী এবং অন্যান্য আকর্ষণীয় পার্সিং চরিত্রগুলিও সন্ধান করে, সুতরাং সে সম্পর্কে আরও তথ্যের জন্য ডকগুলিতে একবার দেখুন।

এখানে স্ট্রিংস

কিছুটা পুনঃনির্দেশ এবং আরও অনেকগুলি পুনঃনির্দেশ এবং এখানে নথির সিনট্যাক্স বোঝার জন্য অনুশীলন, তবে আপনি এখানে স্ট্রিং হয়ে স্ট্যান্ডার্ড পুনঃনির্দেশ অপারেটরের সাথে ডকুমেন্ট স্টাইলের সিনট্যাক্সকে একত্রিত করতে পারেন:

বিড়াল ইনপুট এর পুনর্নির্দেশ আউটপুট

cat > myfile <<<'text to completely overwrite contents of myfile'

বিড়ালের ইনপুটটির পুনঃনির্দেশিত আউটপুট যুক্ত করা হচ্ছে

cat >> myfile <<<'text to completely overwrite contents of myfile'


0

ডকুমেন্ট এবং vi এখানেও ব্যবহার করতে পারেন, নীচের স্ক্রিপ্টটি 3 লাইন এবং ভেরিয়েবল ইন্টারপোলেশন সহ একটি FILE.txt তৈরি করে

VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX

তারপরে ফাইলের নীচের মত 3 লাইন থাকবে। "i" হ'ল vi সন্নিবেশ মোড এবং একইভাবে Esc এবং ZZ দিয়ে ফাইলটি বন্ধ করতে হবে।

#This is my var in text file
var = Test
#Thats end of text file

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