我正在努力通过诗人的 Unix,并尝试创建一个包含所有单词/标记的文件圣经。但是,当使用 tr 时,如建议的那样,这包括空字符串。请参阅下面的示例:
> tr -sc 'A-Za-z' '[\12*]' < bible.txt > bible.words
> sed 5q bible.words
The
Project
Gutenberg
EBook
我已经通读了 tr 的手册页,但没有任何运气。任何有助于理解为什么包含它们的帮助将不胜感激。
编辑:
第一个例子:
圣经.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
第二个例子:
圣经.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
请注意它的前缀空行我不明白。
答案1
您需要了解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