【问题标题】:delete space only before and after first colon仅在第一个冒号前后删除空格
【发布时间】:2018-01-02 10:54:56
【问题描述】:

我有以下格式的数据。

desc                          : ABC 1234567 MNOPQRS 2         AB 0987654

我需要以下格式的数据

desc : ABC 1234567 MNOPQRS 2         AB 0987654

我尝试使用 awk,但它将其更改为错误的格式,基本上也删除了两者之间的空格。

 awk '$1=$1' sample.txt 
 desc : ABC 1234567 MNOPQRS 2 AB 0987654

我也尝试过使用不同的 awk,但它也没有达到目的。在这里它还在输出中增加了额外的空间。

awk 'BEGIN{FS=OFS=":"}{gsub(/^[ \t]+/,"",$2);gsub(/[ \t]+$/,"",$1)}1' sample.txt 
desc:ABC 1234567 MNOPQRS 2         AB 0987654

谁能帮我解决我哪里出错了。 desc 和冒号之间的空格数可能会改变,所以我不想硬编码空格删除。

问候。

【问题讨论】:

    标签: shell awk sed


    【解决方案1】:

    我建议使用 GNU sed:

    sed 's/  *:  */ : /' file
    

    输出:

    描述:ABC 1234567 MNOPQRS 2 AB 0987654

    【讨论】:

    • 第一个冒号之前和之后 =>即使在冒号之后也可以有多个空格。所以我觉得应该是's/ *: */ : /'
    • 关键不是not添加/g(全局)标志,所以它只做1次替换。
    • 还要注意有更多冒号且周围有空格的输入。然后awk 解决方案将失败。
    • @PesaThe:好的,我已经删除了我的 awk 答案。
    【解决方案2】:

    如果您的 Input_file 与您显示的示例相同,那么遵循 awk 解决方案也可能对您有所帮助。

    awk '{sub(/ +: +/," : ")} 1'  Input_file
    

    输出如下。

    desc : ABC 1234567 MNOPQRS 2         AB 0987654
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2016-03-26
      • 2012-10-01
      • 2013-09-23
      • 1970-01-01
      相关资源
      最近更新 更多