【问题标题】:How to remove double spaces in string using sed如何使用 sed 删除字符串中的双空格
【发布时间】:2017-06-11 17:53:26
【问题描述】:

如何去除文件中特定字符串第22和23位的空格?

以下示例和预期结果。

XXXSA3FFESS3052599004   L +

预期结果将是:

XXXS3DFFESS3052599004L +

我的代码似乎不准确,如下所示。请指教。

sed 's/[A-Z0-9]  //g' $file

非常感谢您的帮助。我不确定确切的代码。但我的基本理解是 sed 可以做到这一点。

【问题讨论】:

  • 你认为代码会如何做到这一点?

标签: bash shell awk sed grep


【解决方案1】:
echo 'XXXSA3FFESS3052599004   L +' | sed 's/  *//'

输出:

XXXSA3FFESS3052599004L +

见:The Stack Overflow Regular Expressions FAQ

【讨论】:

  • 感谢赛勒斯,它适用于此,但抱歉我没有提到。文件中还有其他字符串。它会影响其他带有空格的字符串,这些字符串也会删除它们。它应该匹配这个特定字符串的模式。
  • 试试这个:sed -r 's/^(.{21}) +(.*)/\1\2/'
  • @Cyrus 不需要(.*)\2
  • @123: 很好。
  • @Neo if sed 's/<blank><blank>*//' (使用文字空白而不是 - 评论编辑器决定将 2 个连续的空白更改为 1 个空白)不是您所需要的,然后将您的问题编辑为显示一个更具代表性的样本,这样做不会产生所需的输出。如果没有真正具有代表性的输入/输出,我们只是在猜测,因此您很有可能会得到一个比可能的更复杂或更脆弱的解决方案。
【解决方案2】:

或者像这样:

echo 'XXXSA3FFESS3052599004  L +' | sed 's/.//22;s/.//22'

【讨论】:

    【解决方案3】:

    如果您的空间处于固定位置,使用cut 可能更有意义:

    echo 'XXXSA3FFESS3052599004  L +' | cut -c1-21,24-
    

    echo 'XXXSA3FFESS3052599004  L +' | cut --complement -c22,23
    

    【讨论】:

    • 感谢@liborm 感谢您的 cmets。
    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多