sed删除中间的某些空格

时间:2016-02-05 10:21:28

标签: regex linux bash sed

我有一个这样的文本文件:

    6.2341   -0.4024   -2.0936 Cl  0  0  0  0  0  0  0  0  0  0  0  0
    0.1148   -3.7525    1.0392 S   0  0  0  0  0  0  0  0  0  0  0  0
   -2.5441   -0.8745    1.3714 F   0  0  0  0  0  0  0  0  0  0  0  0

格式为:列1到10,11到20,21到30是(10.4)格式的x,y,z坐标,即长度= 10,小数点后4位;第31栏始终是一个空间;第32至32列是原子类型;其余列并不重要。

然而,由于某些未知原因,原子类型字段右移两列,如下所示:

    6.2341   -0.4024   -2.0936   Cl  0  0  0  0  0  0  0  0  0  0  0  0
    0.1148   -3.7525    1.0392   S   0  0  0  0  0  0  0  0  0  0  0  0
   -2.5441   -0.8745    1.3714   F   0  0  0  0  0  0  0  0  0  0  0  0

如何使用sed命令和正则表达式匹配这些行并删除两个额外的空格?

2 个答案:

答案 0 :(得分:0)

sed -r 's/(.{30}) /\1/'可以解决问题。

将前30个字符分组,匹配两个额外的空格,将整数替换为分组字符。

答案 1 :(得分:0)

如果您不介意既不使用sed也不使用正则表达式,则可以使用cut删除2个有问题的字符:

$ cut --complement -c31,32 file
    6.2341   -0.4024   -2.0936 Cl  0  0  0  0  0  0  0  0  0  0  0  0
    0.1148   -3.7525    1.0392 S   0  0  0  0  0  0  0  0  0  0  0  0
   -2.5441   -0.8745    1.3714 F   0  0  0  0  0  0  0  0  0  0  0  0