Linux shell脚本:如何删除单词列表文件中的最终数字?
我有一个示例列表文本文件(每行一个单词): 我想获得:Linux shell脚本:如何删除单词列表文件中的最终数字?,linux,shell,perl,Linux,Shell,Perl,我有一个示例列表文本文件(每行一个单词): 我想获得: John J0hn John45 Smith Sm1th Jane Jane333 Doe555 John J0hn Smith Sm1th Jane Doe 这是:我想删除单词末尾的数字(注意单词中的数字是允许的),然后删除重复的 我在编程方面有一些经验,所以我可以实现一些循环来检查这些数字,然后再实现另一个循环来删除重复的单词,但我认为Linux Shell必须有一些简单的命令或参数扩展来解决这个问题 删除原始文件排序是一种可能,但
John
J0hn
John45
Smith
Sm1th
Jane
Jane333
Doe555
John
J0hn
Smith
Sm1th
Jane
Doe
这是:我想删除单词末尾的数字(注意单词中的数字是允许的),然后删除重复的我在编程方面有一些经验,所以我可以实现一些循环来检查这些数字,然后再实现另一个循环来删除重复的单词,但我认为Linux Shell必须有一些简单的命令或参数扩展来解决这个问题 删除原始文件排序是一种可能,但如果某些方法不需要,则可以 可能的用法:
John
J0hn
John45
Smith
Sm1th
Jane
Jane333
Doe555
John
J0hn
Smith
Sm1th
Jane
Doe
- 隔离密码数据库中使用的单词(John,45John,12345John),以获得多样性的统计信息
John
J0hn
John45
Smith
Sm1th
Jane
Jane333
Doe555
12345
只要像12345
(没有单词的数字)这样的行实际上不是单词末尾的数字,我想保留它,因此结果必须是:
John
J0hn
Smith
Sm1th
Jane
Doe
12345
一个简单的方法是使用sed
和uniq
:
sed "s/\([^0-9]\)[0-9]*\s*$/\1/" file | uniq
这确实假设名称是按顺序排列的。如果没有,您可以使用排序:
sed "s/\([^0-9]\)[0-9]*\s*$/\1/" file | sort -u
编辑:根据@Rotweilers_匿名建议,在行尾添加了空格检查
编辑:根据OP对问题条件的修改,不要从仅为数字的行中删除数字。使用:
输出:
这里的awk
正在运行-这也保留了原始顺序
awk '/[^[:digit:]]/{sub(/[[:digit:]]+$/, "")};!a[$0]++' file
John
J0hn
Smith
Sm1th
Jane
Doe
12345
我建议通过准备潜在的空白来防弹这个解决方案:sed“s/[0-9]*\s*$/”file | sort | uniq
嗯,在我的情况下不需要空白,但最好知道。谢谢你,@Rotweilers\u anonymous.@Rotweilers\u anonymous的确,谢谢你的建议。它确实提出了这样一个问题:John20 30
是否应该减少到John
…在OP中添加了关于只有数字的行的模糊性的额外信息。请阅读。@Sopalajodeardirerez,好的,我已经做了一个重拨来处理这个案子。谢谢,但是有一个可能的歧义:只要像12345
(没有单词的数字)这样的一行不是真正的数字,我想保留它。你能修改你的命令吗?@sopalajodearierez,在CygWin上也能很好地工作。即使使用特殊字符,如“!”、“$”,或文本文件中的“\”。在OP中添加了关于只有数字的行中的歧义的额外信息。请阅读。对于那些感兴趣的人:在CygWin上工作很好,即使有特殊字符,如“!”、“$”,或文本文件中的“\”。