Tr
為什麼 tr -sc ‘A-Za-z’ ‘12∗12∗12*’ 包括空行?
我正在通過Unix For Poets工作,並嘗試製作一個包含聖經中所有單詞/標記的文件。但是,按照建議使用 tr 時,這包括空字元串。請參見下面的範例:
> tr -sc 'A-Za-z' '[\12*]' < bible.txt > bible.words > sed 5q bible.words The Project Gutenberg EBook
我已經閱讀了 tr 的手冊頁,但沒有任何運氣。任何有助於理解為什麼包含它們的幫助將不勝感激。
編輯:
第一個例子:
來自 bible.txt 的行:
1:1 耶穌基督的僕人保羅,蒙召作使徒,
重現意外結果的命令:
> echo '1:1 Paul, a servant of Jesus Christ, called to be an apostle,' | tr -sc 'A-Za-z' '[\12*]' Paul a servant of Jesus Christ called to be an apostle
預期輸出:
Paul a servant of Jesus Christ called to be an apostle
第二個例子:
來自 bible.txt 的行:
詹姆士國王聖經的古騰堡計劃電子書
具有相同意外結果的命令:
echo 'The Project Gutenberg EBook of The King James Bible ' | tr -sc 'A-Za-z' '[\12*]' The Project Gutenberg EBook of The King James Bible
預期輸出:
The Project Gutenberg EBook of The King James Bible
注意它的前綴空行我不明白。
您需要了解
tr
這裡的工作選項才能知道發生了什麼。
-c
=> 補充第一個字元集。意味著,將選擇第一個字元集中未找到的任何字元。在您的情況下,'A-Za-z'
將暗示將選擇任何非字母字元,例如空格、數字、換行符、控製字元。-s
=> 多個連續選擇的字元將squashed
作為一個字元。- 第二組是要映射到的字元。
\12
是換行符的八進制 ascii。這意味著所有字母(大寫和小寫)都保持不變,而非字母的執行應變成一個換行符:
---- -- -------- - - ----- ---- $#%! This is StarWars R2 D2 robot @work. |---| |---| |------| |---| |---| |-----| |----| || \n \n \n \n \n \n \n \n
所有的字母都保持不變,而多個非字母的執行變成了換行符。
output: This is StarWars R D robot work