Saya ingin menggunakan cat dengan wildcard di bash untuk mencetak beberapa file kecil (setiap file satu kalimat) ke output standar. Namun, isi file yang terpisah tidak dipisahkan oleh baris baru, yang ingin saya baca dengan mudah.
Bagaimana saya bisa menambahkan pembatas file semacam ini untuk perintah ini?
in "$@"
- itu implisit.Cukup gunakan satu lingkaran alih-alih sederhana
cat
:sumber
Jika Anda ingin nama file antar file, gunakan
tail
:(Jika anda ingin
tac
bukancat
, beberapatail
implementasi memiliki-r
pilihan untuk setaratac
fungsional)sumber
Ini akan berhasil:
Anda tidak memerlukan loop shell atau sebaliknya, dan ini akan selalu mengikuti output file dengan
\n
ewline - kecuali mungkin yang terakhir.Kalau tidak, jika Anda ingin baris kosong menjadi output antara output setiap file, ini bisa berfungsi:
Itu akan selalu mengikuti output file dengan
\n
ewline dan baris kosong tambahan .Anda bisa menyebutnya seperti:
sumber
for n in 1 2 3; do printf "$n" >"$n"; done; sed '' -- [123]
sed
harus selalu mencetak\n
ewline sebelum mencetak apa pun, baris terakhir dari file terakhir mungkin tidak mendapatkan\n
ewline ditambahkan. saya berani bersumpah ive menjawab pertanyaan ini sebelumnya.1\n2\n3
. berhasil. selalu begitu. apa yang dicetak untuk Anda?\n
di RHS tidak standar. Anda bisa menggunakannyased -e '$G'
.Mirip dengan jawaban @terdon , jika Anda lebih suka melihat nama file di masa depan juga, Anda dapat menggunakan
head
perintah:head
default ke 10 baris pertama, jadi menggunakannya tanpa opsi perintah untuk kasus Anda (satu kalimat per file) baik-baik saja. Jika tidak, Anda memerlukan-n X
opsi.sumber
Cara lain - gunakan
grep -h
untuk hanya mencari string kosong di setiap file. Ini akan cocok dengan semua baris, terlepas dari berapa banyak atau tidaknya baris baru atau tidak. hasil grep selalu diakhiri baris baru. The-h
pilihan Menekan awalan setiap baris output dengan nama file itu berasal dari:Atau Anda bisa menggunakan GNU
paste
dalam-s
mode erial dengan baris baru sebagai pembatas:sumber