Saya menulis skrip bash untuk mencari file jika tidak ada lalu buat dan tambahkan ini ke dalamnya:
Host localhost
ForwardAgent yes
Jadi "line then new line 'tab' then text"
saya pikir ini format yang sensitif. Saya tahu Anda bisa melakukan ini:
cat temp.txt >> data.txt
Tapi sepertinya aneh karena dua garisnya. Apakah ada cara untuk menambahkannya dalam format ini:
echo "hello" >> greetings.txt
shell
text-processing
io-redirection
Legenda
sumber
sumber
( echo "line 1" ; echo "line 2" ) >>greetings.txt
.{ echo "line 1" ; echo "line 2"; } >>greetings.txt
cat <<EOT
yangEOT
hanya string acak. Bisacat <<FOO
juga begitu.Atau, jika itu adalah tab literal yang Anda inginkan (bukan empat spasi dalam pertanyaan Anda):
Anda dapat mencapai efek yang sama dengan
echo
, tetapi seberapa bervariasi dari implementasi ke implementasi, sedangkanprintf
konstan.sumber
sumber
Pendekatan lain adalah menggunakan
tee
Beberapa baris pilihan dari
tee
halaman manual:sumber
SED dapat menambahkan baris ke ujung file seperti:
sed -i '$ a text to be inserted' fileName.file
$
memilih akhir file,a
memberitahu untuk menambahkan, dan setelah ini muncul teks yang akan dimasukkan. Maka tentu saja nama filenya.Sumber: http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html
========== EDIT == ==========
Apakah pendekatan ini memiliki manfaat tambahan daripada solusi lain?
Ya, pendekatan ini memiliki manfaat tambahan untuk menambahkan file apa pun yang dikembalikan dalam pencarian, seperti ini:
find . -name "*.html" -exec sed -i '$ a </html>' {} \;
Saya menggunakan contoh di atas untuk menyisipkan tag html akhir yang hilang pada setiap halaman html dalam sejumlah direktori.
===================================
sumber
sed
. BSDsed
menalangi dengan kesalahan:command a expects \ followed by text
. Jadi jangan gunakan ini untuk solusi skrip; itu mungkin rusak. (Atau lakukan dengan benar karena sintaks yang diperlukan BSD kompatibel dengan POSIX dan akan bekerja pada GNUsed
juga.find
sebagai berikut:find . -name "*.txt" -exec sh -c 'printf "%s\n\t%s\n" "Host localhost" "ForwardAgent yes" >> "$1"' sh {} ";"
.>
,>>
) dan karenanya tidak mengalami masalah seperti menjalankansudo echo 'something' > /file
. Bagi saya itu sempurna memungkinkan untuk menambahkan baris ke file dalam wadah LXD seperti itu:lxc exec c sed -- '$ a newline' /myfile
.echo "a new line" >> foo.file
akan membuat baris baru ketika file bukan akhir dari baris baru, tetapised -i '$ a a new line' foo.file
akan melakukannya, jadised
lebih baik terutama Anda ingin selalu menambahkan baris baru ke file.Saya menggunakan sed karena dapat digunakan dengan sudo. Sebagai contoh:
alternatifnya sangat jelek:
dan bahkan lebih jelek bila dilakukan dengan ssh.
sumber
sed -i
tidak menganggap ekstensi sebagai argumen? Contoh Anda mungkin memiliki parameter yang salah.Satu liner lainnya adalah:
Saya lebih suka
-e
pilihan pemikiran, karena memberi lebih banyak kontrol:sumber
Seseorang dapat meniru
cat >> out.txt
dengan Perl atau Python untuk mencapai efek yang sama. Perl:Dan Python:
Perhatikan bahwa untuk python Anda harus menekan Ctrl+ Ddua kali. Lihat pertanyaan terkait pada stackoverflow untuk info lebih lanjut.
sumber
Berikut adalah contoh untuk menambahkan beberapa baris dalam file:
sumber
Selain jawaban utama, jika file memerlukan izin pengguna super, hanya menambahkan
sudo
di depanecho
tidak akan berfungsi.Ini karena shell merusak perintah dan meskipun
echo
dijalankan sebagai root, tetapi>>
dijalankan dengan privilege normal.Ini akan bekerja untuk pengguna super:
sudo su -c "echo 'Line 3' >> greetings.txt"
sumber
su
sini (sudo su
tidak baik). Tetapi Anda benar bahwa Anda perlu sesuatu untuk mengelola pengalihan shell; mungkinsudo sh -c "echo stuff >> file.txt"
. Tidak ada penghematan bersih tetapi praktik yang lebih baik.