【问题标题】:How can I keep the string of one space only and replace all the other spaces using sed?如何仅保留一个空格的字符串并使用 sed 替换所有其他空格?
【发布时间】:2019-01-03 00:07:33
【问题描述】:
  • 我有一个数据文件 (1.data),其中包含以下内容:

              USSR                  8649                 BS275                  Asia
           Cananda                  3852                  BS25         North America
    

    我想要的是只保留一个空格的字符串并将所有其他空格替换为:

我的 sed 代码:

sed 's/ *   */:/g' 1.data

:USSR:8649:BS275:Asia
:Cananda:3852:BS25:North America

效果很好。

由于我知道 A+ 匹配 A、AA、AAA、AAAA 等,我尝试了另一个正则表达式。

sed 's/ *  +/:/g' 1.data



          USSR                  8649                 BS275                  Asia
       Cananda                  3852                  BS25         North America

但是,它不起作用。没有任何变化。

我犯了什么错误?

【问题讨论】:

  • 请将该示例输入的所需输出添加到您的问题中。
  • 已添加。没有任何变化。

标签: regex sed replace


【解决方案1】:

如果没有添加-r 选项,sed 会将“+”视为普通字符。在添加-r: extended regular expressions 之后,“+”元字符将匹配一个或多个。所以你的命令可以修改为,

sed -r 's/[[:space:]]+/:/g' 1.data

【讨论】:

    【解决方案2】:

    添加选项-E(从正则表达式切换到扩展正则表达式)或将+替换为\+

    【讨论】:

      猜你喜欢
      • 2014-01-25
      • 1970-01-01
      • 2014-04-24
      • 2019-06-07
      • 1970-01-01
      • 2014-09-05
      • 2014-02-04
      • 1970-01-01
      • 2020-04-22
      相关资源
      最近更新 更多