Text-Processing

Gedit 顯示文本,但 cat 講述不同的故事

  • June 14, 2015

我正在嘗試從Grady Ward 的 Moby中對字典進行排序,但遇到了一些問題。當我在 gedit 中打開它時,我得到:

abaca×N
abaciscus×N
abacist×N
aback×v
abacli×p
Abaco×N
abactinal×A
abaculus×N
abacus×N
abac×N
Abadan×N
Abaddon×N
Abad×N
abaft×vP
Abagael×N
Abagail×N

等等。

然而, cat mobyposi.i | less 講述了一個不同的故事。我最終會在每一行開頭<D7>和結尾都得到一堆亂七八糟的字元,^M而且無法閱讀。

^M絕對是一個換行符,dos2unix 不能解決這個問題。至於<D7>’s go,我完全迷路了。我需要能夠刪除這兩個以使其易於閱讀,儘管我確信機器可以很好地通過它。:/

我正在執行 Ubuntu 15.04。

mobyposi.i文件使用舊式 Mac 行尾,即 CR 字元。為什麼?我不知道。這個文件是 1993 年的,也許作者想對 Mac 友好,並認為 Unix 和 Windows 使用者可以自己解決。或者可能是作者弄錯了,readme文件說“詞彙文件

$$ has $$CRLF(ASCII 13/10)分隔符”,而分隔符實際上只是 CR。 單詞和詞性由字節 D7₁₆ = 215₁₀ = 327₈ 分隔。Gedit顯示的×字元是Latin-1編碼中該字節對應的字形。

要將行尾轉換為 Unix 行尾 (LF) 並將單詞/部分分隔符轉換為:,請執行

LC_CTYPE=C tr '\r\327' '\n:' <mobyposi.i >mobyposi.txt

dos2unix沒有做任何事情,因為輸入沒有 DOS 行尾。Gedit 自動檢測到外來編碼的文件(它檢測到換行符,檢測到單字節編碼,並在眾多可能性中選擇了 Latin-1,因為它是這樣配置的)。Less 不會自動檢測外來編碼,它會向您展示在您的語言環境中解釋時文件的外觀。

引用自:https://unix.stackexchange.com/questions/209629