Hai, saya ingin menambahkan teks ke file. Misalnya saya ingin menambahkan tugas ke awal file todo.txt. Saya sadar echo 'task goes here' >> todo.txttetapi itu menambahkan baris ke akhir file (bukan yang saya inginkan).
Hai, saya ingin menambahkan teks ke file. Misalnya saya ingin menambahkan tugas ke awal file todo.txt. Saya sadar echo 'task goes here' >> todo.txttetapi itu menambahkan baris ke akhir file (bukan yang saya inginkan).
Jawaban:
echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt
atau
sed -i '1s/^/task goes here\n/' todo.txt
atau
sed -i '1itask goes here' todo.txt
|) pesan ( echo '...') catyang menggunakan -(input standar) sebagai file pertama dan todo.txtsebagai yang kedua. catbuat beberapa file. Kirim output ( >) ke file bernama temp. Jika tidak ada kesalahan ( &&) sejak catsaat itu ganti nama ( mv) tempfile kembali ke file asli ( todo.txt).
catmenerima backslash n literal, itu tidak akan mengubahnya menjadi baris baru. Sesuatu yang lain pasti telah melakukan itu. Alih-alih cat, coba pilih hexdump -Capakah Anda benar-benar mengirim backslash dan n atau apakah itu baris baru. Anda juga dapat mencoba cat -emenampilkan akhiran garis.
1melakukan perintah berikutnya hanya pada baris satu file dan iperintahnya adalah menyisipkan. Lihat di halaman manual di bawah bagian "Alamat" dan di bagian "Perintah nol atau satu alamat".
Pilihan yang lebih sederhana menurut saya adalah:
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
Ini berfungsi karena perintah di dalam $(...)dieksekusi sebelum todo.txtditimpa dengan> todo.txt
Sementara jawaban lain berfungsi dengan baik, saya menemukan ini jauh lebih mudah diingat karena saya menggunakan gema dan kucing setiap hari.
EDIT: Solusi ini adalah ide yang sangat buruk jika ada backslash todo.txt, karena berkat -eflag echo akan menafsirkannya. Cara lain yang jauh lebih mudah untuk memasukkan baris baru ke dalam kata pengantar adalah ...
echo "task goes here
$(cat todo.txt)" > todo.txt
... cukup menggunakan baris baru. Tentu, itu bukan satu-liner lagi, tetapi secara realistis itu bukan satu-liner sebelumnya, juga. Jika Anda melakukan ini di dalam skrip, dan khawatir tentang indentasi (misalnya Anda menjalankan ini di dalam suatu fungsi) ada beberapa solusi untuk membuat ini tetap pas, termasuk tetapi tidak terbatas pada:
(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
Juga, jika Anda peduli apakah baris baru akan ditambahkan ke akhir todo.txt, jangan gunakan ini. Ya, kecuali yang kedua ke terakhir. Itu tidak mengacaukan akhirnya.
-ejuga mengonversi urutan pelarian di dalam todo.txt?
The moreutilsmemiliki alat yang bagus disebut sponge:
echo "task goes here" | cat - todo.txt | sponge todo.txt
Ini akan "menyerap" STDIN dan kemudian menulis ke file, yang berarti Anda tidak perlu khawatir tentang file sementara dan memindahkannya.
Anda dapat moreutilsmenggunakan banyak distro Linux, melalui apt-get install moreutils, atau pada OS X menggunakan Homebrew , dengan brew install moreutils.
(echo 'ble'; cat todo.txt):-)
Anda dapat menggunakan Vim dalam mode Ex:
ex -s -c '1i|task goes here' -c x todo.txt
1 pilih baris pertama
i memasukkan
x Simpan dan tutup
Anda dapat membuat file sementara yang baru.
echo "new task" > new_todo.txt
cat todo.txt >> new_todo.txt
rm todo.txt
mv new_todo.txt todo.txt
Anda mungkin juga menggunakan sedatau awk. Tetapi pada dasarnya hal yang sama terjadi.
new_todo.txthanya ditulis sebagian. Solusi Anda tampaknya kehilangan file asli.
rmdari file asli.
Jika file teks cukup kecil untuk muat dalam memori, Anda tidak perlu membuat file sementara untuk menggantinya. Anda dapat memuat semuanya ke dalam memori dan menuliskannya kembali ke file.
echo "$(echo 'task goes here' | cat - todo.txt)" > todo.txt
Tidak mungkin menambahkan baris ke awal file tanpa harus menulis seluruh file.
text=$(cat file). Berhati-hatilah untuk hanya menggunakan teks, karena variabel shell bukan biner bersih mywiki.wooledge.org/BashFAQ/058
Anda tidak dapat menyisipkan konten di awal file. Satu-satunya hal yang dapat Anda lakukan adalah mengganti konten yang ada atau menambahkan byte setelah akhir file saat ini.
Solusi apa pun untuk pertanyaan Anda kemudian membutuhkan file sementara (atau buffer) yang akan dibuat (pada memori atau pada disk) yang pada akhirnya akan menimpa file asli.
Waspadalah jangan sampai kehilangan data dengan menyimpan file asli saat membuat yang baru, jika sistem file terjadi penuh selama proses. misalnya:
cat <(echo task go there) todo.txt > todo.txt.new && mv todo.txt.new todo.txt
echo HOME=\"/g/Users/timregan/\" | cat - 'F:\Program Files\Git\etc\profile'berfungsi tetapi cat <echo HOME=\"/g/Users/timregan/\" 'F:\Program Files\Git\etc\profile'memberikan kesalahan "gema: Tidak ada file atau direktori"
<dan (akan memecah sintaks. Cobacat <(echo HOME=\"/g/Users/timregan/\") 'F:\Program Files\Git\etc\profile'
Anda bisa menggunakan tee:
echo 'task goes here' | cat - todo.txt | tee todo.txt
GitBash + Windows10 + Multline :
Ini adalah versi yang memungkinkan Anda menggunakan string multi-line .
##############################################
## This section for demo purpose only, ##
## So you can save entire file as ##
## whatever.sh and run it. ##
## ##
##############################################
> MY_TARGET_FILE.txt ##Make Or Clear File
echo "[STARTER_CONTENT]" >> MY_TARGET_FILE.txt
##############################################
## Below is main code:
##################################################
TARGET_FILE_VARIABLE="MY_TARGET_FILE.txt"
ADD_TO_HEAD_VARIABLE=$(cat << "HEREDOC_HEAD_TEXT"
//| +-------------------------------------+ |//
//| | | |//
//| | MESSAGE_FOR_HEAD_OF_FILE | |//
//| | | |//
//| +-------------------------------------+ |//
HEREDOC_HEAD_TEXT
)
##################################################
TAR=$TARGET_FILE_VARIABLE ##
TEX=$ADD_TO_HEAD_VARIABLE ##
echo "$TEX" | cat - $TAR > TEMP && mv TEMP $TAR ##
##################################################
## Expected contents of MY_TARGET_FILE.txt :
## //| +-------------------------------------+ |//
## //| | | |//
## //| | MESSAGE_FOR_HEAD_OF_FILE | |//
## //| | | |//
## //| +-------------------------------------+ |//
## [STARTER_CONTENT]