Eğer bir eklerseniz | sed -n l
o kadar tail
komuta, muhtemelen böyle bir şey göreceksiniz olmayan yazdırılabilir karakterleri göstermek için:
N\bNA\bAM\bME\bE
Yani, her karakter X
Backspace olarak yazılır X
. Modern terminallerde, karakter kendi üzerine yazılır (Backspace aka BS aka \b
aka ^H
imleci bir sütun sola hareket ettiren karakterdir) fark olmadan. Ancak eski tele-daktilolarda, bu, karakterin iki kat daha fazla mürekkep aldığı için kalın görünmesine neden olur.
Yine de, more
/ less
do gibi çağrı cihazları bu biçimi kalın anlamına gelir, bu yüzden roff
kalın metin çıktısı almak için hala budur .
Bazı insan uygulamaları roff
, bu sekansların kullanılmayacağı (veya uygulamada olduğu gibi ( ortam değişkeni ayarlanmadığı sürece) dahili olarak col -b -p -x
bunları şeritlemeye çağıracak şekilde) çağıracak ve çıktıyı algıladıklarında bir çağrı cihazını çağırmayacaktır. bir terminale gitmiyor (bu yüzden orada çalışır), ama seninki değil.man-db
MAN_KEEP_FORMATTING
man bash | grep NAME
Bu col -b
dizileri kaldırmak için kullanabilirsiniz ( alt çizgi için başka türler de vardır ( _
BS X
)).
GNU kullanarak sistemler için roff
(GNU veya FreeBSD gibi), o diziler sağlayarak ilk etapta kullanılan önleyebilirsiniz -c -b -u
seçenekleri geçirilir grotty
sağlayarak örneğin -P-cbu
geçirilir seçenekleri groff
.
Örneğin, groff
içeren bir sarmalayıcı komut dosyası oluşturarak :
#! /bin/sh -
exec /usr/bin/groff -P-cbu "$@"
/ Usr / bin / groff'un önüne koyduğunuz $PATH
.
MacOS 'ile man
(ayrıca GNU kullanarak roff
) aşağıdakilerle bir tane oluşturabilirsiniz man-no-overstrike.conf
:
NROFF /usr/bin/groff -mandoc -Tutf8 -P-cbu
Ve şu şekilde arayın man
:
man -C man-no-overstrike.conf bash | grep NAME
Yine de GNU ile roff
, GROFF_SGR
ortam değişkenini ayarlarsanız (veya GROFF_NO_SGR
varsayılanı derleme zamanında nasıl ayarlandığına bağlı olarak değişkeni ayarlamazsanız), o zaman grotty
( -c
seçeneği geçmediği sürece ) bunun yerine ANSI SGR terminal kaçış dizilerini kullanır karakter özellikleri için bu BS hileleri. seçeneği less
ile çağrıldığında onları anlamak -R
.
FreeBSD adam aramaları grotty
ile -c
opsiyona soran sürece renkler MANCOLOR değişkeni (bu durumda ayarlayarak -c
geçmedi grotty
ve grotty
ANSI SGR çıkış sırasını orada kullanmanın varsayılan geri döner).
MANCOLOR=1 man bash | grep NAME
orada çalışacak.
Debian'da, GROFF_SGR varsayılan değildir. Yaparsan:
GROFF_SGR=1 man bash | grep NAME
Bununla birlikte, man
's stdout bir terminal olmadığı için, bir GROFF_NO_SGR
değişkeni de geçirmesi kendi başına alır grotty
(Sanırım hala olsa bile, SGR sekanslarının nasıl şeritleneceğini bilmediği col -bpx
için BS sekanslarını col
şeritlemek için kullanılabilir. bunu yapar MAN_KEEP_FORMATTING
) GROFF_SGR
. Bunun yerine şunları yapabilirsiniz:
GROFF_SGR=1 MANPAGER='grep NAME' man bash
(bir terminalde) SGR kaçış sekanslarına sahiptir.
O zaman, bu NAME'lerin bazılarının terminalde kalın olarak (ve bir less -R
çağrı cihazında) göründüğünü fark edeceksiniz . Çıkışı sed -n l
( MANPAGER='sed -n /NAME/l'
) öğesine beslerseniz, şöyle bir şey görürsünüz:
\033[1mNAME\033[0m$
\e[1m
ANSI uyumlu terminallerde kalın yazı tipini etkinleştirme \e[0m
sırası ve tüm SGR niteliklerini varsayılana döndürme sırası nerede .
Bu metinde grep NAME
, metnin içerdiği gibi çalışır NAME
, ancak metnin yalnızca bölümlerinin kalın / altı çizili olduğu yerlerde arama yaparken sorun yaşayabilirsiniz ...