【问题标题】:sed to remove certain spaces in the middlesed 删除中间的某些空格
【发布时间】:2016-02-05 10:21:27
【问题描述】:

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

    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坐标,即length=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命令和正则表达式匹配这些行并删除多余的两个空格?

【问题讨论】:

  • 为什么需要使用sed?为什么需要使用正则表达式?

标签: regex linux bash sed


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果您不介意既不使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 2019-01-31
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多