Dengan contoh perintah
man apropos > outputfile
file teks dihasilkan yang berisi man
halaman yang diformat apropos
(dengan beberapa perbedaan kecil sehubungan dengan man apropos
langsung dicetak di layar, seperti huruf tebal).
Tapi saya ingin secara manual mengatur lebar garis maksimum dari file output yang dihasilkan, sehingga semua paragraf akan dibenarkan untuk lebar itu.
man
halaman dibuat melalui groff
: misalnya, saya mencoba untuk meletakkan di .ll 50
depan paragraf dari .gz
man
file teks sumber asli , tetapi sepele jika saya perlu bekerja pada beberapa man
halaman. Apalagi tidak semua karakter dikenali:
apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169
Jadi, saya ingin tahu apakah ada metode yang lebih mudah. Bagaimana cara mengubah lebar garis maksimum, selama pembuatan outputfile
? Apakah ada perintah khusus?
Edit :
(Semua pertimbangan berikut adalah tentang Ubuntu 18.04: Saya tidak dapat lagi mengujinya di versi sebelumnya, termasuk 14,04 dari pertanyaan di atas.)
Mengenai solusi sementara satu baris, jika MANWIDTH
belum diekspor dengan nilai khusus, tidak ada perbedaan di antara keduanya
$ MANWIDTH=60 man apropos > outputfile
dan
$ COLUMNS=60 man apropos > outputfile
Namun yang pertama, menggunakan MANWIDTH
, pada prinsipnya lebih baik.
Sunting 2 (tidak terkait langsung dengan pertanyaan):
Untuk membuat pengaturan lebar permanen yang diterapkan pada pencetakan halaman manual, perlu untuk mengekspor nilai variabel yang diinginkan. Dengan:
$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile
man apropos
akan dicetak dengan lebar yang sama terlepas dari ukuran jendela terminal apa pun. Sebagai gantinya,
$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile
akan memberikan hasil yang sama seperti sebelumnya hanya jika jendela terminal tidak diubah ukurannya antara export
dan man <page> > outputfile
.
input code
kesalahan Anda195 168
bisa è di UTF-8. Apakah halaman manual dalam bahasa Inggris? Apa implementasi pria Anda? Apa lokasi kamu?man man
2.6.7.1). Halaman manual dalam bahasa Italia dan itu UTF-8. Apa yang Anda maksud dengan lokal?locale
? danlocale charmap
?locale
output:LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8"
locale charmap
output:UTF-8
less
karenaTERM
tidak diatur. Maksud sayaenv -i LANG=it_IT.UTF-8 man apropos > output
(atau| head
).Jawaban:
Gunakan
MANWIDTH
variabel lingkungan:Halaman manual untuk man 2.7.4 mengatakan:
Artinya, itu menimpa keduanya
COLUMNS
danioctl
nilai. Saya lebih suka untuk tidak bergantung pada modifikasiCOLUMNS
(meskipun itu bekerja di sini) karena nilainya diperbarui secara dinamis setiap kali ukuran jendela berubah.Menggunakan
MANWIDTH
alih-alihCOLUMNS
juga memungkinkan Anda untuk membuat perubahan permanen dengan menambahkan baris sepertiexport MANWIDTH=60
ke file startup shell Anda.sumber
export MANWIDTH=60
jika menyetel ini di~/.bashrc
. Lihat stackoverflow.com/a/30173376/82216 . Juga, pertimbangkanman
untuk menggunakan fungsi untuk mengatur MANWIDTH tergantung pada lebar terminal Anda, seperti yang disarankan di sini di Arch wiki.export MANWIDTH=60
?export
karena Anda bertanya tentang solusi sementara: "Bagaimana mengubah lebar garis maksimum, selama pembuatan file keluaran? " (Penekanan tambang). Anda bahkan mungkin ingin mengembalikan hasil edit karena tidak menambah pertanyaan. (Komentar lebih tepat.)export
pernyataan karena dalam komentar itu hampir tidak dapat dibaca (tidak mungkin membuat baris baru).Coba atur
COLUMNS
variabel lingkungan. Bekerja untuk saya denganman
darimandb
2.7.0.2 di Debian dengangroff
1.22.3.Dengan versi di Ubuntu 14.04, saya perlu menulisnya:
Di sana,
man
tampaknya mengabaikanCOLUMNS
variabel lingkungan jika stdin adalah terminal (kemudian meminta perangkat terminal untuk lebar terminal).Anda juga dapat mencoba:
Yang dengan
zsh
Anda dapat disingkat menjadi:Anda bisa melakukannya dengan memohon
groff
dengan tangan sebagai:Anda tidak dapat menemukan karakter dengan kesalahan kode input karena Anda menggunakan
-Tascii
alih-alih-Tutf8
dan tidak menggunakannya-k
untuk melakukan pra-proses filepreconv
.sumber
COLUMNS=60 man apropos | head
tetapi sayangnya lebar keluaran adalah semua lebar layar. Bisakah saya mengatur variabel diCOLUMNS
tempat lain atau dengan cara lain?COLUMNS=60 < /dev/null man apropos | head
. Sepertinya pada Ubuntu 14.04, ia tidak percayaCOLUMNS
jika stdin adalah terminal (dan mendapatkan lebar dari perangkat terminal).Anda dapat menggunakan
fmt
perintah, yang sejauh yang saya tahu ada di distribusi Linux.akan membungkus baris di 70 karakter.
sumber
Kamu bisa menggunakan
fold
akan dilipat setelah setiap 20 karakter (!). Perhatikan bahwa ini akan memotong kata menjadi dua karena satu-satunya pilihan adalah "lipat setiap 20 karakter"
mengurus ini, Anda dapat menggunakan
sed
sebagai berikut (dengan panjang garis dinamis)akan menambahkan baris baru setelah 20 karakter acak diikuti oleh spasi (yaitu kata baru). Jadi garis mungkin lebih panjang dari 20 karakter (kecocokan adalah 20 karakter kemudian spasi sehingga kata 26 karakter akan menghasilkan garis 26 karakter)
Untuk menghilangkan spasi terakhir dalam
sed
perintah:sumber