Jika Anda menambahkan | sed -n lke tailperintah itu, untuk menampilkan karakter yang tidak dapat dicetak, Anda mungkin akan melihat sesuatu seperti:
N\bNA\bAM\bME\bE
Artinya, setiap karakter ditulis sebagai XBackspace X. Pada terminal modern, karakter akhirnya ditulis sendiri (karena Backspace alias BS alias \balias ^Hadalah karakter yang menggerakkan kursor satu kolom ke kiri) tanpa perbedaan. Tetapi dalam mesin tik tele-kuno, itu akan menyebabkan karakter muncul dalam huruf tebal karena mendapat tinta dua kali lebih banyak.
Namun, pager suka more/ lessmengerti format itu artinya tebal, jadi itu yang membuat roffteks tebal.
Beberapa implementasi manusia akan memanggil roffdengan cara bahwa urutan itu tidak digunakan (atau panggilan internal col -b -p -xuntuk menghapusnya seperti dalam kasus man-dbimplementasi (kecuali MAN_KEEP_FORMATTINGvariabel lingkungan diatur)), dan tidak meminta pager ketika mereka mendeteksi output tidak pergi ke terminal (jadi man bash | grep NAMEakan bekerja di sana), tetapi bukan milik Anda.
Anda dapat menggunakan col -buntuk menghapus urutan tersebut (ada tipe lain ( _BS X) juga untuk garis bawah).
Untuk sistem yang menggunakan GNU roff(seperti GNU atau FreeBSD), Anda dapat menghindari urutan yang digunakan di tempat pertama dengan memastikan -c -b -uopsi diteruskan grotty, misalnya dengan memastikan -P-cbuopsi dilewatkan ke groff.
Misalnya dengan membuat skrip wrapper yang disebut groffmengandung:
#! /bin/sh -
exec /usr/bin/groff -P-cbu "$@"
Anda menempatkan / usr / bin / groff di depan $PATH.
Dengan macOS ' man(juga menggunakan GNU roff), Anda dapat membuat man-no-overstrike.confdengan:
NROFF /usr/bin/groff -mandoc -Tutf8 -P-cbu
Dan sebut mansebagai:
man -C man-no-overstrike.conf bash | grep NAME
Masih dengan GNU roff, jika Anda mengatur GROFF_SGRvariabel lingkungan (atau tidak mengatur GROFF_NO_SGRvariabel tergantung pada bagaimana default telah ditetapkan pada waktu kompilasi), maka grotty(selama itu tidak lulus -copsi) akan menggunakan urutan pelarian terminal ANSI SGR sebagai gantinya dari trik BS untuk atribut karakter. lessmemahaminya saat dipanggil dengan -Ropsi.
Orang FreeBSD memanggil grottydengan -copsi kecuali Anda meminta warna dengan mengatur variabel MANCOLOR (dalam hal -cini tidak diteruskan ke grottydan grottykembali ke default menggunakan ANSI SGR urutan melarikan diri di sana).
MANCOLOR=1 man bash | grep NAME
akan bekerja di sana.
Di Debian, GROFF_SGR bukan default. Jika kamu melakukan:
GROFF_SGR=1 man bash | grep NAME
Namun, karena manstdout bukan terminal, dibutuhkan sendiri untuk meneruskan GROFF_NO_SGRvariabel ke grotty(saya kira sehingga dapat digunakan col -bpxuntuk menghapus urutan BS karena coltidak tahu cara menghapus urutan SGR, meskipun masih melakukannya dengan MAN_KEEP_FORMATTING) yang menimpa GROFF_SGR. Anda bisa melakukannya:
GROFF_SGR=1 MANPAGER='grep NAME' man bash
(di terminal) untuk mendapatkan urutan pelarian SGR.
Saat itu, Anda akan melihat bahwa beberapa dari NAMA itu tampil dengan huruf tebal di terminal (dan dalam less -Rpager). Jika Anda memberi makan output ke sed -n l( MANPAGER='sed -n /NAME/l'), Anda akan melihat sesuatu seperti:
\033[1mNAME\033[0m$
Di mana \e[1murutan untuk mengaktifkan huruf tebal di terminal yang kompatibel dengan ANSI, dan \e[0murutan untuk mengembalikan semua atribut SGR ke default.
Pada teks itu grep NAMEberfungsi sebagai teks yang memang berisi NAME, tetapi Anda masih bisa memiliki masalah jika mencari teks di mana hanya bagian itu yang dicetak tebal / bergaris bawah ...