題:
手冊頁的節標題為什麼不完整?
Jonathan Merklin
2018-06-26 01:39:18 UTC
view on stackexchange narkive permalink

這是在El Capitan和同事的High Sierra(標準終端)中測試的。

  user @ hostname〜$ man ls |grep“ BU”
臭蟲
用戶@主機名〜$ man ls |grep“ BUG”
用戶@主機名〜$
用戶@主機名〜$ man ls |grep“ IEEE”
     文件以與IEEE Std 1003.2(``POSIX.2'')兼容
     ls實用程序符合IEEE Std 1003.1-2001(``POSIX.1'')。
 

為了澄清:“ BUGS”是該(以及其他各種)聯機幫助頁中的部分標題。對於章節標題,grepping似乎僅對前2個字符有效;這在我們嘗試過的幾個不同章節標題中是一致的。對於其餘的內容, grep 似乎可以正常工作。

我將它放入一個非BSD風格的Linux盒(Amazon Linux)中,它似乎沒有表現出相同的行為。

這是怎麼回事?

這是我討厭BSD男人的部分原因。它格式化文本並運行尋呼機,即使其輸出是管道也是如此。我的傳呼機是vim,所以Linus禁止我做過`man foo |grep bar`,我得到了一個無響應的管道(也許是一個混亂的終端來啟動)。:/ [mandb man](http://man-db.nongnu.org/),在Linux上通常會看到,它更明智。
https://unix.stackexchange.com/questions/371062/也是MacOS問題。
一 回答:
Scot
2018-06-26 01:58:59 UTC
view on stackexchange narkive permalink

如果在手冊頁中查看原始代碼,則可以看到發生了什麼。一種方法是將手冊頁導出到文件並直接檢查其內容:

  man ls > man.ls
納米管
 

文件中的“ BUGS”一詞實際上是這樣的:

  B ^ HBU ^ HUG ^ HGS ^ HS
 

您將看到標題包含格式字符,因此不存在整個單詞“ BUGS”。


如果要訪問手冊頁的純文本內容,可以使用命令

  man -P cat <thepage>
 

-P 選項設置其他UNIX上的尋呼機,而 cat 將忽略格式信息,並提供純文本輸出。但是,這似乎在macOS上不起作用,因此輸出需要在管道中進行手動 col -b 步驟:

  man ls |col -b |grep BUGS
 
謝謝蘇格蘭人!重定向到文件並在文本編輯器中打開應該是我嘗試的第一件事。使用該信息以及來自https://unix.stackexchange.com/a/15866的信息(即`man ls | col -b | grep“ BUGS”`),我就能得到想要的東西。
天哪,黑體字是舊的TTY和打字機時代,要知道它們不能很好地對齊並且會沉積更多墨水,請鍵入字母和退格鍵,然後再次鍵入字母。必須有一個`nroff`命令來翻譯,如果您需要`grep`-您介意我通過使用`man`將正確的命令傳遞給`groff`來擴展它嗎?
@Kroltan蘇格蘭語也為+10和+10。這比我沒有想到要給這隻貓剝皮更優雅。
@Kroltan嗯-對我來說,`man -P cat ls |grep BUGS與`man ls |的工作原理相同grep BUGS`,兩者均不返回任何內容。
@Kroltan傳呼機不是您需要交換的部分-它只是在輸出不適合屏幕時處理,因此在`troff` /`groff` /`nroff`格式化輸出之後出現。剝離退格字符還不夠(您將獲得“ BBUUGGSS”),您需要說服格式化程序不要首先生成它們。
關於“ man man”的提示建議將輸出通過“ col -b”管道傳輸以巧妙地刪除空格,而“ man ls |col -b |grep BUGS`確實可以在我的(CentOS Linux)系統上運行。不知道該命令在MacOS上是否可用。
為什麼不在默認的尋呼機-man -P“ less -p BUGS” ls中搜索呢?
@IMSoP hmm,一定是系統差異,然後,我在Arch中測試了它,並為BUGS進行了grepping處理。我的錯。
對於使用GNU roff的手動系統,確實有一些“ grotty”選項可以阻止它發出TTY-37或ECMA48控制序列。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...