2016-02-05 47 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