2013-05-10 54 views
4

我有一個ASCII文本文件。我想使用一個或多個Ubuntu命令從該文件生成所有「單詞」列表。一個詞被定義爲分隔符之間的一個字母序列。分隔符默認情況下是空格,但我也想嘗試其他字符,如標點符號等。換句話說,我希望能夠指定一個分隔符字符集。我如何只生成一組獨特的單詞?如果我還想只列出那些長度至少爲N個字符的單詞,該怎麼辦?如何從ubuntu的文本文件生成(唯一)單詞列表?

+0

基本上你需要一個bash或更一般的shell腳本。 – 2013-05-10 19:18:10

回答

9

你可以使用grep:

-E「\ w +」搜索詞 -o只打印匹配 %的貓溫度 一些示例使用該行的部分「敏捷的棕色狐狸跳過了懶狗「 而不是」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告訴排序比較的話

如果你只是想每一個字時忽略的情況下,一旦

% 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 

我們加入「 - 」在非分隔符列表清單,懶惰的狗被打印出來。其他輸出

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參數,將作爲一個分隔符。我希望這也能解決你的分隔符問題。

0

這應該爲你工作:

tr \ \\t\\v\\f\\r \\n | | tr -s \\n | tr -dc a-zA-Z0-9\\n | LC_ALL=C sort | uniq 

如果您想獲得至少5個字符,管tr通過grep .....輸出的字符。如果您希望區分大小寫,請在sort之前將tr A-Z a-z粘貼到某個位置。

請注意,LC_ALL=Csort正常工作所必需的。

我建議您閱讀man頁面,瞭解您在此不理解的ant命令。

相關問題