如何从 Linux 上的文本文件中删除指数项和浮点数?

如何从 Linux 上的文本文件中删除指数项和浮点数?

我应该使用什么正则表达式来从文本文件中删除指数项和浮点数?

例如,我的文件中有以下术语:

-0.161678
relational
0.081827
5.936420e-01
-0.155506
Favori54
0.086938
1.187284e+00
-0.149283
0.091921
"External"
1.780926e+00
-0.143025

我希望我的文件只包含以下几行:

relational
Favori54
"External"

答案1

在我看来你想要以任何内容开头的行一个数字或减号。这将得到:

grep '^[^0-9,-]' file.txt

答案2

awk '/^[+-]?[0-9]+\.?[0-9]*([Ee][+-]?[0-9]+)?$/ { next }
     /^[+-]?\.[0-9]+([Ee][+-]?[0-9]+)?$/ { next }
     { print }' yourfile

数字的尾数部分可以以点开头,也可以以点结尾,但不能仅为点:.是无效的,并且添加指数(例如 ).E3不会使其有效。0..0是有效的,无论有无指数。指数可以是大写或小写e,并且可以具有明确的+符号。

请注意,这假设浮点值周围没有空格。它还匹配整数值。此外,它还会通过与浮点表示法不同的项目,这些项目带有垃圾字符或其他字符,例如1E+1.0A.0E+33x。请注意,其中一些示例将浮点表示法作为有效字首

可以将两个正则表达式组合起来,以避免重复公共指数部分和公共规则操作。但结果的可读性会更差。

最后,{ print }可以“精简代码”到1。表达式1为布尔真,而 awk 对真条件或匹配模式的默认操作是{ print }

答案3

尝试这个:

awk ‘{if($1+0!=$1) print $0}’ 文件名.txt

相关内容