我想修改一个文件以删除所有标点符号、数字和大写字母,并更改文件以使每行只有 1 个单词例如:
Hello, how are you!
你 好吗
在一些帮助下我想出了这个:
tr -d '[:punct:]' < file | tr -s '[:space:]' '\n' | tr -d '[0-9]' | tr '[A-Z]' '[a-z]' > cleanfile.txt
然而问题是,当我的文件中有一个地址时,我最终会得到 httpadresscom 而不是
http
adress
com
我也不希望像“don't”或“readme.txt”这样的词有这个输出
don
t
readme
txt
答案1
这应该隔离所有单词,只留下点和引号在里面。和下划线,可能不想要 - 然后\w
不起作用。
]# grep -oE "(\w|\.\w|'\w)*" text
one
two
Three
four
linux
file
system
isn't
What
nothing
mailto
a.b
some.org
Molly's
cat
Wrote
a
readme.txt
一二。三四linux的文件系统不是啥? “没什么”邮寄至: [电子邮件受保护]莫莉的猫。写了readme.txt。
问题tr
是你需要的最小上下文。在这里你会被困住,因为some.org
你想要分裂,但readme.txt
不是。现在“@”不见了。
答案2
对于第一部分:不要删除标点符号,而是将其转换为空格。
对于第二个(不要等):您可能需要一本单词词典,或者不删除'
s。