Apakah ada metode untuk mencetak output multi-baris (output tunggal) pada baris yang sama?
Misalnya, jika outputnya adalah:
abc
def
qwerty
Apakah mungkin untuk mencetak:
abcdefqwerty
command-line
scripts
text-processing
Shrinidhi Kulkarni
sumber
sumber
printf
+cat
+perl
kombo jauh lebih baik ditangani melaluiperl -pe 's/\n//;END{printf "\n"}' input.txt
proses Tunggal, tidak ada substitusi perintah dan mengacaukan kutipan, dan tidak ada UUOC. Mungkin.Anda dapat menyalurkan output multiline melalui
awk
atau gunakan
sed
:Contoh dijalankan
Bacaan lebih lanjut: hapus jeda baris menggunakan AWK · serverfault.SE
sumber
Juga
your_command | paste -sd ''
yang mempertahankan baris baru.sumber
Jika Anda ingin menggunakan Perl untuk ini, Anda dapat menggunakan
chomp
fungsinya:Beberapa lebih detail, bagi yang berminat.
Anda bisa memberikan satu atau lebih nama file sebagai argumen selanjutnya.
Dalam beberapa kasus Anda mungkin tidak ingin melakukan itu , tetapi Anda dapat mengirim atau mengarahkan ke perintah itu. (Kemampuan ini - dan peringatan itu - semuanya berlaku untuk solusi lain
perl -p
atauperl -n
berbasis, juga.)Jadi, jika Anda ingin memproses output dari menjalankan
some-command
:Ini berpotensi lebih cepat daripada perintah Perl dalam jawaban terdon . Karakter
\n
baris baru (diwakili oleh ) hanya muncul di akhir baris dalam situasi ini - karena mereka adalah yang digunakan Perl untuk memutuskan di mana setiap baris berakhir.s/\n//
mencari seluruh baris untuk baris baru, sementarachomp
hanya menghapus yang di akhir (jika ada, karena baris terakhir mungkin atau mungkin tidak memiliki satu).Kinerja mungkin bukan alasan utama untuk memilih
chomp
. Theperl
perintah dalam jawaban Terdon ini hanya akan sedikit lebih lambat kecuali Anda sedang memproses file besar dengan garis-garis yang sangat panjang. Dan jika Anda membutuhkan kecepatan, cara David Foerster mungkin masih lebih cepat.chomp
adalah, bagaimanapun, alat yang tepat untuk ini jika Anda menggunakan Perl, dan saya pikir maksudchomp
lebih jelas dari itus/\n//
. Pada akhirnya mungkin tidak ada jawaban obyektif yang lebih baik.Mencetak baris terakhir.
Namun, saya merekomendasikan penggunaan substitusi perintah (
$(
)
) hanya untuk memastikan baris baru yang tertinggal dicetak. Kecuali jika teks yang Anda proses pendek, itu kemungkinan akan sangat lambat - ia harus mengumpulkan semua teks sekaligus dan kemudian mencetaknya - dan itu membuat perintah Anda lebih sulit untuk dipahami. Sebaliknya Anda dapat melakukan seperti yang disarankan David Foerster dan jalankanecho
atauprintf '\n'
sesudahnya.Jika Anda mem-piping dari atau (seperti yang ditunjukkan David Foerster) mengalihkan dari perintah itu, maka Anda dapat melampirkannya
{
;}
sehingga output dari kedua perintah diambil secara bersamaan. Jika Anda hanya mencetaknya ke terminal, maka Anda dapat menjalankannya persis seperti yang ditunjukkan di atas. Ini berfungsi bahkan jika Anda mengirim atau mengarahkan ke perintah, karenaecho
/printf '\n'
sebenarnya tidak membaca input apa pun. Artinya, ini berfungsi:Sementara di sini Anda tidak bisa menghapus
{
;}
:Atau, jika Anda mau, Anda bisa
perl
mencetak sendiri baris terakhir. Seperti melampirkanperl
danecho
perintah dalam{
;}
, pendekatan ini bekerja bahkan jika Anda perpipaan sedang atau mengarahkan dari itu (dan, seperti semua pendekatan, karya ini ketika Anda perpipaan sedang untuk itu, juga):Perhatikan bahwa perintah dalam jawaban terdon berfungsi dengan baik dengan metode pencetakan baris terakhir akhir ini. Sebagai contoh:
sumber
perl -wpe 'chomp; END { print "\n" }
adalah proses yang sama, keuntungan kecil daripada menambahkan trailing echoMenggunakan cara shell-only:
sumber
Jawaban ini memiliki solusi untuk masalah yang Anda coba buat: Mengapa bash menghapus \ n dalam $ (file cat)?
Jika Anda mengetik,
cat myfile.txt
Anda akan melihat:Tetapi jika Anda mengetik,
echo $(cat myfile.txt)
Anda akan melihat:Perhatikan metode ini menyisipkan ruang di mana garis-garis baru terpisah dulu. Ini membuat output lebih mudah dibaca tetapi tidak sepenuhnya mematuhi ruang lingkup pertanyaan Anda.
sumber
Jika Anda menggunakan Bash, maka Anda dapat melakukannya tanpa alat eksternal.
Hasil:
Perintah pertama mengubah output multiline menjadi sebuah array, perintah kedua memperluas array menjadi beberapa argumen pada satu baris.
sumber