如何在bash中将文件拆分为保持标点符号的单词?

时间:2014-09-17 06:30:37

标签: bash split

例如,我有一个普通文本的文件,例如:

"Word1 word2, word3; word4. Word5"

我想获得一个每行1个单词的文件,保持点状,然后命令:

,
.
;
Word1
word2
word3
word4
Word5
到目前为止谷歌搜索,我发现这最接近我的需要:

#!/bin/sh


for word in $(cat "input_file.txt"):
        do echo $word >> output_file1.txt;

done


sort "output_file1.txt" >> "output_file2.txt"

这会产生这种输出:

Word1
word2, 
word3;
word4.
Word5

明显划分空白区域。 如何用空格和标点字符分隔,保留它们?

P.S:文件输入文件中包含许多特殊字符,例如diacretical标记:

Kuͦn,zuͦ,buͤtten,güetter。

当应用grep -Eo '\w+|[^\w ]' file时,它们会被拆分,就像diacretical标记是分隔符一样:

gu
̈
etter

虽然在其他情况下这些字符不会影响拆分:

brüchen

1 个答案:

答案 0 :(得分:3)

使用grep -Eo

grep -Eo '\w+|[^\w ]' file
Word1
word2
,
word3
;
word4
.
Word5

要对其进行排序:

grep -Eo '\w+|[^\w ]' file | sort -f
,
.
;
Word1
word2
word3
word4
Word5

PS:您还可以使用grep而不-E

grep -o '[[:alnum:]]\+\|[[:punct:]]'