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
Linux shell脚本:如何删除单词列表文件中的最终数字?_Linux_Shell_Perl - Fatal编程技术网

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),以获得多样性的统计信息
欢迎提出意见。谢谢你

EDIT-1:这种“字典”文本文件中不需要空格(无论如何,谢谢你,@rotweilers\u anonymous)

EDIT-2:增加了一个可能的歧义示例,一个只有数字的“单词”:它必须被保留(我知道,我知道,这不是严格意义上的“单词”;-)。原始文件示例:

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上工作很好,即使有特殊字符,如“!”、“$”,或文本文件中的“\”。