使用shell脚本按字母顺序列出文件中的单词,没有标点符号

时间:2014-11-25 13:06:51

标签: bash shell

我正在使用Shell脚本和bash命令。

我必须从一个包含很多句子的文件生成一个按字母顺序排列的单词列表,我正在使用歌词来解决这个问题。我可以按字母顺序返回每个单词,但它仍然包含一些撇号,问号和句号。这样做我用:

cat lyrics01.txt | tr "\"' " '\n' | sort -u >> lyrics01.wl 

我知道这会告诉列表在每个空格和撇号之后下降但是我需要它来删除标点符号并且只是按字母顺序排列的单词。

我已尝试实施此部分:

-d ',.;:-+=()'
在' tr'之后从我的原始代码,但它将无法正常工作。任何帮助以更简单的方式甚至解决这个问题都将非常感激。

3 个答案:

答案 0 :(得分:0)

尝试使用以下内容:

sed 's/\([[:punct:] ]\)/\n/g' lyrics01.txt | sort -u >> lyrics01.wl 

这将删除所有标点符号或空格,并将其替换为换行符。

答案 1 :(得分:0)

假设您希望在单词上拆分行但不在标点符号上拆分,以便"世界不公平。"变

The
world
isnt
fair

而不是

The
world
isn
t
fair
<blank line>

以下应该做你想做的事情

sed 's/[[:punct:]]*//g;s/ /\n/g' lyrics01.txt | sort -u >> lyrics01.wl

答案 2 :(得分:0)

所有示例似乎都删除了“is not”一词中的单引号 如果这不是你想要的,我已经测试并想出了这个:

$ cat test.txt
The
world
isn't
fair.

Isn't it ?

 $ sed "s/ /\n/g" test.txt | sed "s/[[:punct:]]$/\n/g" | grep .
The
world
isn't
fair
Isn't
it
$

它没有排序,但这表明你可以保留功能,如果不是在最后