Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用shell脚本按字母顺序列出文件中的单词,不带标点符号_Bash_Shell - Fatal编程技术网

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

Bash 使用shell脚本按字母顺序列出文件中的单词,不带标点符号,bash,shell,Bash,Shell,我正在使用Shell脚本和bash命令 我必须从一个包含许多句子的文件中生成一个按字母顺序排列的单词列表,我正在使用歌词来解决这个问题。我可以按字母顺序返回每个单词,但仍然包含一些撇号、问号和句号。为此,我使用: cat lyrics01.txt | tr "\"' " '\n' | sort -u >> lyrics01.wl 我知道这会告诉列表在每个空格和撇号后向下移动,但我需要它来删除标点符号,只是按照字母顺序排列单词 我已尝试实施此部分: -d ',.;:-+=()'

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

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

cat lyrics01.txt | tr "\"' " '\n' | sort -u >> lyrics01.wl 
我知道这会告诉列表在每个空格和撇号后向下移动,但我需要它来删除标点符号,只是按照字母顺序排列单词

我已尝试实施此部分:

-d ',.;:-+=()'
在“tr”之后从我的原始代码中删除,但它将不起作用。如果您能提供更简单的方法或解决此问题的任何帮助,我们将不胜感激。

请尝试以下sed:

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

这将删除任何标点符号或空格,并将其替换为新的行字符。

假设您希望在单词上拆分行,但不希望在标点上拆分行,这样“世界不公平。”将变为

而不是

The
world
isn
t
fair
<blank line>

所有的例子似乎都删除了“不是”一词中的一句话 如果这不是您想要的,我已经测试并得出以下结论:

$ 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
$

它没有被排序,但这是为了表明,如果不是在最后,你可以保留穿孔

很高兴它起作用了。如果答案有帮助,请接受它,这样它就会关闭,将来可能对其他人有帮助。@etanresiner是什么告诉命令不要输出任何标点符号的?e、 撇号还是问号?
[:punct://code>是一个表示所有标点符号的字符类。sed命令的第一部分说匹配任何和所有标点(
/[:punct:]*/
),并用空字符串(
//
)替换它。啊,我现在明白了,再次感谢您的帮助。我会支持你的答案,但不幸的是,我还没有15个名声。
sed 's/[[:punct:]]*//g;s/ /\n/g' lyrics01.txt | sort -u >> lyrics01.wl
$ 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
$