Saya bisa lakukan cat file.txt
untuk mendapatkan isi file tetapi saya juga ingin memakukan pada baris terakhir yang saya pilih.
Saya mencoba perpipaan (cat file.txt ; echo "My final line") |
tetapi hanya garis terakhir yang melewati pipa. Bagaimana saya bisa bergabung dengan kucing dan garis akhir?
Sunting untuk klarifikasi: Saya tidak ingin memodifikasi file itu sendiri. Saya sadar bahwa jika ini adalah kasus yang dapat saya lakukan echo "My final line" >> file.txt
atau echo "My final line" | tee -a file.txt
tetapi saya hanya mencoba untuk melakukan penambahan dalam konteks perintah khusus ini sehingga saya dapat menyambungkan dalam rangkaian dari file.txt
dan "My final line"
.
command-line
pipe
cat
echo
Bas
sumber
sumber
echo "My final line" >> file.txt
?>>
jika saya ingin mengedit file itu sendiri.file.txt
? Cuplikan pipa Anda harusnya berfungsi.Jawaban:
Anda dapat meningkatkan
cat
kemampuan membaca dari stdin yang dikombinasikan dengan kemampuannya untuk membaca banyak file untuk mencapai ini.Anda juga dapat menambahkan sebuah baris, seperti:
Perhatikan bahwa Anda tidak terbatas pada satu baris.
cat
akan membaca dari stdin hingga mencapai EOF. Anda dapat melewatkan output daricurl
, misalnya, untuk menambahkan atau menambahkan ke output daricat
.sumber
(cat file.txt ; echo "My final line") | …
akan melakukannya juga. Tetapi menggunakancat
untuk apa itu dirancang +1 lebih baik.echo "$$" "$BASHPID" | head -q -n 1 /proc/mounts - | cat
vs.( head -q -n 1 /proc/mounts; echo "$$" "$BASHPID" ) | cat
atau bahkan{ head -q -n 1 /proc/mounts; echo "$$" "$BASHPID"; } | cat
.Untuk menambahkan baris ke file, Anda bisa menggunakan operator pengalihan shell append,
>>
(file akanopen(2)
ditandai denganO_APPEND
flag):Sekarang, jika Anda hanya ingin melihat konten file dengan baris akhir ditambahkan, saya akan gunakan
cat
dengan dua argumen:file.txt
cat
hanya berurusan dengan file), Anda dapat memanfaatkan subtitusi proses<()
, yang akan mengembalikan deskriptor file (/proc/self/fd/<fd_number>)
.Menyatukan ini:
Jika Anda ingin hasil paging, anggap
less
pager favorit Anda:sumber
<()
berfungsi untuk bash, tetapi untuk apa cangkang lain berfungsi? Ksh? Berlari?ksh
,zsh
- Ya,dash
- Tidak.Dari
man sed
opsi-e
$
cocok dengan baris terakhir dana
menambahkan string.Jika Anda ingin menambahkan baris ke file secara permanen, gunakan
-i
Mengubah perintah menjadi
sumber
Itu sudah diklarifikasi dalam komentar untuk pertanyaan, tetapi menambahkannya lagi sebagai jawaban di sini.
Perintah yang disebutkan dalam pertanyaan,
berfungsi seperti yang diharapkan - semua output dari subkulit yang dibentuk oleh tanda kurung disalurkan ke perintah kedua.
Jika file tidak diakhiri dengan baris baru, string yang digaungkan ditambahkan ke baris terakhir - ini biasa terjadi pada semua solusi lain di sini, dan dapat diselesaikan dengan menambahkan gema (kosong) sebelumnya.
sumber
awk
:awk 1 file.txt; echo "My final line"
.awk 1 file
adalah trik yang bagus untuk mengkompensasi hilangnya EOL di akhir file.echo "\nMy final line"
tanpa harus bergantung padaawk