我有一个 ASCII 文本文件。我想使用一个或多个 Ubuntu 命令从该文件生成所有“单词”的列表。单词被定义为定界符之间的字母数字序列。默认情况下,分隔符是空格,但我也想尝试使用其他字符,如标点符号等。换句话说,我希望能够指定一个分隔符字符集。我如何只生成一组独特的单词?如果我还想只列出长度至少为 N 个字符的单词怎么办?
你可以使用 grep:
-E '\w+'
搜索词
-o
仅打印与 % cat temp
匹配的行部分
一些示例使用“The quick brown fox jumped over the lazy dog”,而不是“Lorem ipsum dolor sit amet, consectetur adipiscing elit”例如文本。
如果你不关心单词是否重复
% grep -o -E '\w+' temp
Some
examples
use
The
quick
brown
fox
jumped
over
the
lazy
dog
rather
than
Lorem
ipsum
dolor
sit
amet
consectetur
adipiscing
elit
for
example
text
如果你想每个单词只打印一次,不管大小写,你可以使用排序
-u
每个单词只打印一次
-f
告诉 sort 在比较单词时忽略大小写
如果你只想要每个单词一次
% grep -o -E '\w+' temp | sort -u -f
adipiscing
amet
brown
consectetur
dog
dolor
elit
example
examples
for
fox
ipsum
jumped
lazy
Lorem
over
quick
rather
sit
Some
text
than
The
use
你也可以使用tr
命令
echo the quick brown fox jumped over the lazydog | tr -cs 'a-zA-Z0-9' '\n'
the
quick
brown
fox
jumped
over
the
lazydog
-c
为指定字符的补码; -s
挤出替换的重复项; 'a-zA-Z0-9' 是一组字母数字,如果您在此处添加一个字符,则输入不会在该字符上分隔(参见下面的另一个示例); '\n' 是替换字符(换行符)。
echo the quick brown fox jumped over the lazy-dog | tr -cs 'a-zA-Z0-9-' '\n'
the
quick
brown
fox
jumped
over
the
lazy-dog
当我们在非定界符列表中添加“-”时,打印了 lazy-dog。其他输出是
echo the quick brown fox jumped over the lazy-dog | tr -cs 'a-zA-Z0-9' '\n'
the
quick
brown
fox
jumped
over
the
lazy
dog
tr 的总结:任何不在 -c
参数中的字符都将作为分隔符。我希望这也能解决您的定界符问题。
我是一名优秀的程序员,十分优秀!