查找并删除以数字开头/结尾的单词

查找并删除以数字开头/结尾的单词

我有一个大文件(>10000 行),每行包含一个单词,每个单词后面有一个换行符。单词中不包含空格。

我想列出(或者更好的是,输出到新文件)任何以数字开头和/或结尾的单词,然后我想从原始文件中删除它们。我不想删除只包含数字的单词。

例如,如果我有内容

789
hello
1hello
112121hello3323
he11o
hello9
88888

然后字符串1hello, 112121hello3323,hello9将获得输出,然后从文件中删除。

我怎样才能做到这一点?

答案1

GNU grep

grep -vP '^\d+\D|\D\d+$'

产生

789
hello
he11o
88888

答案2

实际编辑源文件并使用丢弃的文件创建一个新文件有点棘手。我会这样做

$ cat file
789
hello
1hello
112121hello3323
he11o
hello9
88888

$ perl -i -lne 'if (/^\d+\D|\D\d+$/) {warn "$_\n"} else {print}' file 2>file_nums

$ cat file
789
hello
he11o
88888

$ cat file_nums
1hello
112121hello3323
hello9

匹配的行在 stderr 上输出,然后重定向到单独的文件。 perl 的-i标志负责就地保存更改。

一句台词可能更棘手:

perl -i -lne 'print {/^\d+\D|\D\d+$/ ? STDERR : ARGVOUT} $_' file 2>file_nums

答案3

解决方案awk

awk '$0!~/.*[[:alpha:]][[:digit:]]+$/ && $0!~/^[[:digit:]]+[[:alpha:]]+/' words.txt
789
hello
he11o
88888

相关内容