例如,我有一个普通文本的文件,例如:
"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
答案 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:]]'