locate ... | less
menghasilkan jalur panjang, yang ditampilkan sebagai beberapa garis di terminal, meskipun sebenarnya satu garis.
Saya menyalin jalur dari terminal dengan memilih teks dengan mouse dan menekan Ctrl+ Shift+ C. Ketika saya menempelkannya ke file teks, saya mendapatkan perubahan-baris yang tidak diinginkan dalam teks, persis seperti yang ditunjukkan pada terminal.
Tapi saya ingat kadang-kadang saya bisa menyalin output jalur panjang dengan locate ... | less
, tanpa memperkenalkan perubahan garis yang tidak diinginkan, dan kadang-kadang saya tidak bisa. Saya tidak menyadari jika saya melakukan sesuatu yang berbeda.
Jadi saya bertanya-tanya bagaimana cara memastikan masalah tidak akan terjadi? Terima kasih!
OS Saya: Ubuntu 12.04.
Terminal saya: Terminal Gnome 3.4.1.1
Jawaban:
Alih-alih menyalin apa yang ditampilkan di terminal (hanya yang cocok dengan layar), salin teks yang sebenarnya. Gunakan salah satu utilitas eksternal xsel atau xclip (mereka memiliki sebagian besar fitur yang sama, saya akan menggunakan xsel dalam jawaban ini) untuk menyalin data dari atau ke papan klip X. Untuk menyalin ke clipboard, sampaikan konten yang diinginkan pada input standar. Saat menempel dari clipboard, konten ditulis ke output standar.
Dalam kurang, gunakan
|
perintah untuk menyalurkan sekelompok garis melalui perintah. Gulir ke baris pertama yang ingin Anda tindak lanjuti, ketikmm
untuk menetapkan tanda, gulir ke baris terakhir, dan ketik|mxsel -b
dan tekan Enter. Dua tanda sudah ditentukan sebelumnya:^
untuk awal file,$
untuk akhir file. Jadi, untuk menyalin seluruh file, gunakan<|$xsel -b
. Untuk menyalin satu baris, gunakanmm|mxsel -b
dan Enter.Hapus
-b
opsi untuk menyalin ke pemilihan utama alih-alih clipboard.sumber
Perilaku nyata ini adalah sebagai berikut:
jika Anda berada di
less
dan Anda memiliki file dengan garis yang sangat panjang, maka jika Anda menggulir ke garis yang panjang ke bawah dan menggulir kembali ke atas, Anda memiliki beberapa baris, saat menyalin seluruh teks. Setelah itu, ketika Anda menggulirkan garis yang terpecah ke bawah di bagian bawah terminal dan menggulirkan garis ke atas lagi, jeda baris akan dihapus lagi.Untuk visualisasi:
sumber
Anda dapat menyalin garis keluaran tanpa baris baru tambahan ( penghentian baris) jika teks langsung ditampilkan ke terminal.
Terminal dapat melacak di mana garis akhir yang sebenarnya berada.
Tetapi jika jalurnya adalah keluaran oleh
less
ataupager
program serupa , terminal tidak tahu di mana baris baru berada. Pager menggunakan terminal sebagai layar penuh karakter, dan memberitahu terminal "letakkan karakter ini di sana" dan operasi seperti menggulir. Tapi, untuk terminal, tidak ada cara untuk melihat di mana baris baru dimaksudkan.sumber
locate <something> | less
dalam dua kasus yang berbeda.echo $LESS
, mungkin ada opsi menarik untuk kurang.)-S
mode jadi mungkin itu membuatnya lebih buruk juga.Di
less
, jika Anda memilih beberapa baris teks yang dibungkus dan kemudian menyalinnya, itu akan turun sebagai satu baris.Jika Anda menekan PgUplalu menyalin teks yang sama, itu akan turun sebagai beberapa baris.
PgDnbaik-baik saja, panah baik-baik saja. Tetapi PgUpmenyebabkan teks terpecah.
sumber
Jika tujuannya adalah untuk menyalin & menempel, saya menggunakan
cat
bukanless
ataumore
dan kemudian terminal menangkapnya karena sebenarnya bukan daripada yang sedang ditampilkan.sumber