Pertanyaan OP memiliki terlalu banyak jawaban yang mungkin menarik. Mulai dengan echo -e $(cat test.txt).
Thomas Dickey
Jawaban:
10
Saya sedang mencari solusi untuk pertanyaan bash yang tepat ini. Saya hampir ketinggalan komentar @Thomas Dickey yang memberi saya solusi paling elegan.
echo -e $(cat test.txt)
Beberapa hal yang tidak berhasil bagi saya adalah (tampaknya Anda tidak dapat menyambungkan hal-hal ke gema)
cat test.txt | echo -e
atau
less -R test.txt
Masalah lain yang saya miliki adalah bahwa echo -e tidak mencetak baris baru dan spasi putih yang berdekatan di dalam file dengan baik. Untuk mencetaknya, saya menggunakan yang berikut ini.
echo -ne $(cat test.txt | sed 's/$/\\n/'| sed 's/ /\\a /g')
Jawaban yang bagus, tetapi \amembunyikan bel untuk saya. Saya mengubah perintah sed kedua Anda sed 's/ /\\033\\a /g'yang tidak membunyikan bel.
elang
1
Setelah pengujian lebih lanjut dan menemukan lebih banyak inkonsistensi dalam program terminal yang berbeda (iTerm, Atom / nuclide), saya telah menemukan yang terbaik untuk hanya membungkus $(cat file.txt)tanda kutip ganda dan menambahkan baris baru di akhir - tidak perlu untuk sed - jadi: echo -ne "$(<file.txt)" \\natau echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Itu juga mencegah bash melakukan ekspansi global dalam teks.
hawk
1
Jika Anda tidak melihat warna dari catkarakter kontrol mungkin tidak utuh.
Beberapa alat menghapus karakter kontrol tetapi biarkan di ujung ekor.
Membandingkan:
echo -e "\e[0;31mExample\e[0m foo"
untuk
echo -e "[0;31mExample[0m foo"
Anda mungkin dapat membangun kembali urutan kontrol dari yang tersisa, meskipun itu bukan bukti bodoh karena regex yang Anda gunakan mungkin secara tidak sengaja menarik urutan karakter yang tidak diinginkan, dll. Tapi misalnya:
echo -e "[0;31mExample[0m foo"| sed "s:\[\([0-9]*[;m]\):^[[\1:g"
Ini seharusnya bekerja secara default. Misal jika saya lakukan ls --color=always > /tmp/adan daripada cat /tmp/a, saya melihat warnanya. Memeriksa dengan odmengkonfirmasi bahwa file tersebut menggunakan warna ANSI.
Jadi saya pikir Anda harus memeriksa apakah terminal Anda mendukung warna ANSI (dan mereka diaktifkan).
less -R
, misalnya.cat
cetak Anda ?echo -e $(cat test.txt)
.Jawaban:
Saya sedang mencari solusi untuk pertanyaan bash yang tepat ini. Saya hampir ketinggalan komentar @Thomas Dickey yang memberi saya solusi paling elegan.
Beberapa hal yang tidak berhasil bagi saya adalah (tampaknya Anda tidak dapat menyambungkan hal-hal ke gema)
atau
Masalah lain yang saya miliki adalah bahwa echo -e tidak mencetak baris baru dan spasi putih yang berdekatan di dalam file dengan baik. Untuk mencetaknya, saya menggunakan yang berikut ini.
Ini berfungsi untuk file test.txt yang berisi
sumber
\a
membunyikan bel untuk saya. Saya mengubah perintah sed kedua Andased 's/ /\\033\\a /g'
yang tidak membunyikan bel.$(cat file.txt)
tanda kutip ganda dan menambahkan baris baru di akhir - tidak perlu untuk sed - jadi:echo -ne "$(<file.txt)" \\n
atauecho -ne "$(cat <<"EOF" . . . EOF)" \\n
. Itu juga mencegah bash melakukan ekspansi global dalam teks.Jika Anda tidak melihat warna dari
cat
karakter kontrol mungkin tidak utuh.Beberapa alat menghapus karakter kontrol tetapi biarkan di ujung ekor.
Membandingkan:
untuk
Anda mungkin dapat membangun kembali urutan kontrol dari yang tersisa, meskipun itu bukan bukti bodoh karena regex yang Anda gunakan mungkin secara tidak sengaja menarik urutan karakter yang tidak diinginkan, dll. Tapi misalnya:
akan mengembalikan warna ke string contoh.
sumber
Ini seharusnya bekerja secara default. Misal jika saya lakukan
ls --color=always > /tmp/a
dan daripadacat /tmp/a
, saya melihat warnanya. Memeriksa denganod
mengkonfirmasi bahwa file tersebut menggunakan warna ANSI.Jadi saya pikir Anda harus memeriksa apakah terminal Anda mendukung warna ANSI (dan mereka diaktifkan).
sumber