マニュアルページのセクションタイトルが完全に削除できないのはなぜですか?


14

これは、エルキャピタンと同僚のハイシエラ、標準ターミナル(bash)でテストされました。

user@hostname ~ $ man ls | grep "BU"
BUGS
user@hostname ~ $ man ls | grep "BUG"
user@hostname ~ $ 
user@hostname ~ $ man ls | grep "IEEE"
     files in order to be compatible with the IEEE Std 1003.2 (``POSIX.2'')
     The ls utility conforms to IEEE Std 1003.1-2001 (``POSIX.1'').

明確にするために:「バグ」は、その(および他のさまざまな)マンページのセクションタイトルです。セクションタイトルの場合、grepが機能するのは最初の2文字だけです。これは、試したいくつかの異なるセクションタイトルで一貫しています。残りのコンテンツについては、grep期待どおりに機能するようです。

非BSDフレーバーのLinuxボックス(Amazon Linux)にsshしましたが、同じ動作をするようには見えません。

何が起きてる?


これは、私がBSDマンを嫌う理由の一部です。出力がパイプであっても、テキストをフォーマットし、ページャーを実行します。そして、私のポケットベルはvimなので、Linusは私がこれまでやったことを禁じman foo | grep barています。:/ mandb manは、Linuxで通常見られるものですが、より賢明です。
ムール

回答:


15

manページ内で生のコードを表示すると、何が起こっているのかを確認できます。これを行う1つの方法は、manページをファイルにエクスポートし、その内容を直接検査することです。

man ls > man.ls
nano man.ls

ファイル内の「バグ」という単語は、実際には次のようになります。

B^HBU^HUG^HGS^HS

ヘッダーに書式設定文字が含まれているため、「バグ」という単語全体は存在しません。


マニュアルページのプレーンテキストコンテンツにアクセスする場合は、次のコマンドを使用できます。

man -P cat <thepage>

この-Pオプションは、他のUNIXでページャーを設定しcat、フォーマット情報を無視して、プレーンテキスト出力を提供します。ただし、これはmacOSでは機能しないようであるため、出力col -bにはパイプラインの手動ステップが必要です。

man ls | col -b | grep BUGS

2
スコットありがとう!ファイルにリダイレクトしてテキストエディタで開くことは、私が最初に試したことでした。その情報と、unix.stackexchange.com / a / 15866からの情報を使用して(つまりman ls | col -b | grep "BUGS")欲しいものを手に入れることができました。
ジョナサンメルクリン

7
神聖な、太字は古いTTYとタイプライターの時代であり、文字とバックスペースを入力し、文字をもう一度入力します。nroff必要に応じて翻訳するコマンドが必要ですgrep -正しいコマンドをgroffvia に渡す方法でこれを拡張してもかまいmanませんか?
bmike

@Kroltan +10と+10もスコットランドに。それは私がこの特定の猫の皮を剥ぐことを考えていなかったよりもずっとエレガントです。
bmike

@Kroltan Hmmm-私にとっては、man -P cat ls | grep BUGSと同じようman ls | grep BUGSに動作しますが、どちらも何も返しません。
スコットランド、

1
GNU roffを使用する手動システムのgrotty場合、TTY-37またはECMA48制御シーケンスの出力を停止するオプションがあります。
JdeBP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.