如何使用 sed 删除文件中不以数字开头且 linux 左侧没有 space 的行

How to delete the lines in a file not starting with numbers and have no space to the left in linux using sed

我有一个如下所示的输入文件:

       48819  5.05780805e+00  1.98145833e+00  1.68575829e+02
       48815  6.06856107e+00  1.98165597e+00  1.68575500e+02
*KEYWORD
$TIME_VALUE =  5.0000443e+00
$STATE_NO = 52
$Output for State 52 at time = 5.00004
*NODE
       48027  4.84536486e+01  6.01658273e+00  1.49520029e+02
       48028  4.85477927e+01  5.02370845e+00  1.49519394e+02

我必须删除所有以非数字数据开头的行。请注意,数据是 space 分隔的,并且带有特殊字符的文本是从位置 1 开始的,因此该行中该文本之前没有 space。

sed -i 选项有什么建议吗?

我会使用:

$ sed -n '/^\s*[0-9]/p' file
       48819  5.05780805e+00  1.98145833e+00  1.68575829e+02
       48815  6.06856107e+00  1.98165597e+00  1.68575500e+02
       48027  4.84536486e+01  6.01658273e+00  1.49520029e+02
       48028  4.85477927e+01  5.02370845e+00  1.49519394e+02

这使用了-n到"suppress automatic printing of pattern space",所以我们只打印我们想要的行。在这种情况下,以 0 个或多个空格后跟一个数字开头的那些。

要使用 sed -i,您可以说 sed -n -i.bak ... 以便就地替换,保留 file.bak 文件作为备份。

sed:

sed -rn '/^[[:space:]]+[0-9]/p' File

仅打印以一个或多个 space/tab 开头的行,后跟一个数字。

就地更改:

sed -rni '/^[[:space:]]+[0-9]/p' File