2009年2月7日 星期六

在Cygwin將man查詢結果存成文字檔

在cygwin的環境中,常常會使用man去查詢相關文件,但有時候為了方便瀏覽都會將內容轉成文字檔。

        man bash > Bash_man.txt

 當用vim或是notepad++開啟時,都會出現有控制碼,仔細看看man指令後,其中有一段內容是:

        To get a plain text version of a man page,without backspaces and underscores, try

         man foo | col -b > foo.mantxt

重試加入col的指令,出現"sh: col:command not found"錯誤訊息,上www.Cygwin.com後,發現cygutil已經沒有將col包進去了!

還是不死心~繼續上Google找資料,查到有人也遇到相同的問題。「col missing from cygwin」

其中有位大大,用perl指令來取代backspaces and undersocores。

        perl -wpe 's/.\010//g'

        man bash | perl -wpe 's/.\010//g' > Bash_man.txt
加入perl後成功產生文字檔。

後來,有感而發決定自己弄個Python版本。

        man bash | python -c 'import sys,re; print "".join([re.compile(".\010").sub("",text) for tex in sys.stdin])' > Bash_man.txt
果然,寫起來沒有perl簡潔漂亮,為了改Pythonp版讓指令看起來更美觀,改用gawk來做取代的工作。

        man bash | gawk '{gsub(/.\010/,"",$0); print $0}' > Bash_man.txt
最後,還將gawk版本加入alias功能(alias和gawk的單雙引號搞得我團團轉,試很久才知道,gawk後面只能接單引號)。

        alias man_plain='gawk '\''{gsub(/.\010/,"",$0); print $0}'\'' '
參考網址:

沒有留言:

張貼留言