2016-02-05 55 views
-1

我有一个文本文件这样一定空间: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分别是x,y,z坐标中(10.4)格式,即长度= 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命令和正则表达式匹配这些线和删除两个多余的空间?

+0

为什么你需要使用SED?为什么你需要使用正则表达式? –

回答

0

sed -r 's/(.{30}) /\1/'会做的伎俩。

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

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