ගොනුවකට පේළි කිහිපයක් එකතු කරන්නේ කෙසේද


351

ගොනුවක් නොපවතින්නේ නම් එය නිර්මාණය කර එය එකතු කරන්න:

Host localhost
    ForwardAgent yes

එබැවින් "line then new line 'tab' then text"එය සංවේදී ආකෘතියක් යැයි මම සිතමි. ඔබට මෙය කළ හැකි බව මම දනිමි:

cat temp.txt >> data.txt

නමුත් එහි පේළි දෙකේ සිට එය අමුතු දෙයක් ලෙස පෙනේ. මෙම ආකෘතියට එය එකතු කිරීමට ක්‍රමයක් තිබේද:

echo "hello" >> greetings.txt

Answers:


613
# 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
L “ලෙජන්ඩ්” එය “මෙහි ලේඛනයක්” ලෙස හැඳින්වේ. මෑන් පිටුවේ එම ඡේදය දෙස බලන්න.
හෝක් ලේජිං

2
තවත් එක් හැකියාවක් තිබේ ( echo "line 1" ; echo "line 2" ) >>greetings.txt.
ott--

3
@ ott-- ඔබට සැබෑ උපසිරැසියක් අවශ්‍ය නොවේ (එනම් එක් නව ක්‍රියාවලියක් සුරැකිය හැක), මෙය ප්‍රමාණවත් ය:{ echo "line 1" ; echo "line 2"; } >>greetings.txt
හෝක් ලේජිං

2
EOT සහ EOL අතර වෙනස කුමක්ද?
cikatomo

16
@cikatomo දී cat <<EOTඇති EOTයන්තම් අහඹු string වේ. එසේ විය හැකිය cat <<FOO.
හෝක් ලේජින්

64
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නියත ය.



22

තවත් ප්රවේශයක් වන්නේ භාවිතා කිරීමයි tee

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

teeමිනිසාගේ පිටුවෙන් තේරීම් රේඛා කිහිපයක් :

ටී උපයෝගීතාව සම්මත ප්‍රතිදානය සම්මත ප්‍රතිදානය වෙත පිටපත් කරන අතර, පිටපතක් ශුන්‍ය හෝ වැඩි ගණනකින් සාදයි.

-a - ලිපිගොනු නැවත ලිවීමට වඩා ප්‍රතිදානය එකතු කරන්න.


6

SED ට ගොනුවක අවසානයට පේළියක් එකතු කළ හැකිය:

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

========= EDIT == ==========

මෙම ප්‍රවේශයට වෙනත් විසඳුම් වලට වඩා අමතර ප්‍රතිලාභයක් තිබේද?
ඔව්, සෙවුමකින් ආපසු එන ඕනෑම ලිපිගොනු වලට එකතු වීමේ අමතර වාසිය මෙම ප්‍රවේශයට ඇත: find . -name "*.html" -exec sed -i '$ a </html>' {} \;

සෑම html පිටුවකම නැතිවූ html ටැගය ඩිරෙක්ටරි ගණනාවක් තුළ ඇතුළත් කිරීමට මම ඉහත උදාහරණය භාවිතා කළෙමි.

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


1
ගොනුවකට පේළි කිහිපයක් එකතු කිරීම සඳහා ඔබ වාක්‍ය ඛණ්ඩය පෙන්වන්නේ නම්, මෙය ප්‍රශ්නයට පිළිතුරක් වනු ඇත (එතරම් ප්‍රයෝජනවත් නොවූවත්). අනෙක් සියලුම පිළිතුරු නව පෙළ ලියන්න. මෙම පිළිතුර මුළු ගොනුවම කියවා එය නැවත ලියයි. මෙම ප්රවේශය අනෙක් අයට වඩා ප්රතිලාභයක් තිබේද?
ජී-මෑන් පවසන්නේ 'මොනිකා නැවත

මෙය ක්‍රියාත්මක වන්නේ GNU සමඟ පමණි sed. sedදෝෂය සමඟ BSD ඇප : command a expects \ followed by text. එබැවින් මෙය ස්ක්‍රිප්ට් විසඳුමක් සඳහා භාවිතා නොකරන්න; එය බිඳ දැමීමට බැඳී සිටී. (නැතහොත් BSD අවශ්‍ය සින්ටැක්ස් POSIX අනුකූල වන බැවින් එය නිසි ලෙස කරන්න. එය GNU මතද ක්‍රියාත්මක sedවේ.
Wildcard

අනෙක් පිළිතුරු 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.
ඩ්‍රැකෝ ආටර්

මෙම echo "a new line" >> foo.fileගොනුව නව මාර්ගය අවසන් නොවන විට, නමුත් නව රේඛාවක් නිර්මාණය කළ නොහැකි වනු ඇත sed -i '$ a a new line' foo.fileකරන්නේ, ඒ නිසා sed, විශේෂයෙන්ම ඔබ ගොනුව සඳහා සෑම විටම නව රේඛාවක් ඇතුලත් අවශ්ය වඩා හොඳ වේ.
zhouji

3

ගොනුවක පේළි කිහිපයක් එකතු කිරීමට උදාහරණයක් මෙන්න:

{
        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

1

මම sed භාවිතා කළේ එය sudo සමඟ භාවිතා කළ හැකි බැවිනි. උදාහරණයක් වශයෙන්:

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දිගුවක් තර්කයක් ලෙස නොගනීද? ඔබේ උදාහරණයේ වැරදි පරාමිතීන් තිබිය හැක.
protometa

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දෙවරක් පහර දීමට සිදුවන බව සලකන්න . වැඩි විස්තර සඳහා ස්ටැක් ඕවර් ප්‍රවාහය පිළිබඳ අදාළ ප්‍රශ්නය බලන්න .


0

ප්‍රධාන පිළිතුරට අමතරව, ගොනුවට සුපිරි පරිශීලක අවසර අවශ්‍ය නම්, sudoඉදිරියෙන් එකතු කිරීම ක්‍රියා echoනොකරනු ඇත.

මෙයට හේතුව කවචය විධාන කඩ කරන අතර එය echoroot ලෙස ක්‍රියාත්මක වුවද >>සාමාන්‍ය වරප්‍රසාද සහිතව ධාවනය වීමයි.

මෙය සුපිරි පරිශීලකයා සඳහා ක්‍රියා කරනු ඇත: sudo su -c "echo 'Line 3' >> greetings.txt"


ඔබට suමෙහි අවශ්‍ය නැත ( sudo suහොඳ නැත). නමුත් ෂෙල් යළි හරවා යැවීම කළමනාකරණය කිරීමට ඔබට යමක් අවශ්‍ය බව ඔබ නිවැරදිය. සමහර විට sudo sh -c "echo stuff >> file.txt". ශුද්ධ ඉතිරියක් නැති නමුත් වඩා හොඳ පුහුණුවක්.
රෝයිමා
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.