删除所有不全是数字的文本行

删除所有不全是数字的文本行

我有一个单词列表,我想将其中仅包含数字的每一行文本提取到一个新文件中。我该怎么办?

答案1

要提取仅包含数字的行:

$ grep -x '[0-9][0-9]*' words >digits

正则表达式[0-9][0-9]*将匹配任何包含至少一位数字的行,并且-x选项grep要求整行匹配给定的表达式。

如果您的文件没有空行,您可以将其更改为grep -x '[0-9]*'.

如果你想要线条数字,删除带有字母字符的行(比尝试为通用数字构造正则表达式更容易):

$ grep -v '[a-zA-Z]' words >numbers

两种变体都使用 POSIX 字符类:

$ grep -x '[[:digit:]][[:digit:]]*' words >digits
$ grep -v '[[:alpha:]]' words >numbers

更新:如果要选择包含以下内容的行浮点数字您可以使用(扩展)正则表达式^[+-]?([0-9]*\.)?[0-9]+$

$ grep -x -E '[+-]?([0-9]*\.)?[0-9]+' words >floats

这一切都取决于我们正在寻找什么样的“数字”。

答案2

删除任何包含字母 by 的行sed,然后将输出放入另一个文件:

sed '/[a-z]/Id' yourInputFile > yourOutputFile

或者如果您想就地更改原始文件:

sed -i '/[a-z]/Id' yourInputFile 

相关内容