Saya telah menggunakan sed
beberapa waktu tetapi ini adalah kekhasan yang saya alami , yang tidak bisa saya selesaikan.
Biarkan saya menjelaskan masalah saya dengan kasus yang sebenarnya.
Adegan # 1
printf "ls" | xclip -selection clipboard
echo "ls" | xclip -selection clipboard
Pada perintah pertama, saya menyalurkan printf
output ke xclip
sehingga disalin ke clipboard. Sekarang, printf
tidak seperti echo
tidak memasukkan baris baru di akhir secara default. Jadi, jika saya menempelkan konten ini ke terminal, ls
perintah yang disalin tidak berjalan secara otomatis.
Di baris kedua, ada baris baru di bagian akhir, jadi menempelkan konten clipboard juga menghasilkan jalannya perintah di clipboard.
Ini tidak diinginkan untukku. Jadi, saya ingin menghapus baris baru menggunakan sed
, tetapi gagal, seperti yang dijelaskan dalam adegan di bawah ini.
Adegan # 2
echo "ls" | sed -r 's/\n//g' | xclip -selection clipboard
Konten di clipboard masih berisi baris baru. Ketika saya menempelkannya ke terminal, perintah secara otomatis berjalan.
Saya juga mencoba menghapus karakter carriage return \r
. Tapi nada. Sepertinya saya kehilangan sesuatu yang sangat penting / mendasar di sini.
generate-text | xclip
kasus ini. Jawaban ini hanya menghilangkan baris baru terakhir.Banyak alat pemrosesan teks, termasuk sed, beroperasi pada konten baris, tidak termasuk karakter baris baru. Hal pertama yang dilakukan saat memproses sebuah baris adalah menghapus baris baru di bagian akhir, kemudian mengeksekusi perintah dalam skrip, dan menambahkan baris baru saat mencetak. Jadi, Anda tidak akan dapat menghapus baris baru dengan sed.
Untuk menghapus semua baris baru, Anda dapat menggunakan
tr
:sumber
Anda dapat mengganti baris baru dengan sed dengan opsi -z .
Halaman manual sed:
sumber
| xclip
kasus ini.Jika Anda hanya menempatkan perintah di clipboard
Jika Anda juga perlu membuat transformasi yang lebih kompleks,
sumber
perl
danpython
keduanya jauh lebih lambat daripada yangsed
bisa digunakan dengan benar. Belajar menggunakannya dengan benar adalah kuncinya.sed
dapat melakukan jauh lebih banyak daripada hanya menangani satu-liner Anda, dan kemungkinan bisa melakukannya lebih cepat daripada alat-alat lain yang Anda sebutkan.Untuk menghapus hanya baris baru terakhir , pipa melalui:
sed
tidak akan menambahkan\0
ke akhir aliran jika pembatas diatur keNUL
via-z
, sedangkan untuk membuat file teks POSIX (didefinisikan berakhir di a\n
), selalu akan menghasilkan akhir\n
tanpa-z
.Misalnya:
Dan untuk membuktikan tidak ada yang
NUL
ditambahkan:Untuk menghapus beberapa baris baru , ikuti :
sumber