如何使用 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
我有一个如下所示的输入文件:
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