【问题标题】:Using sed to add a space使用 sed 添加空格
【发布时间】:2014-02-11 17:14:44
【问题描述】:

我需要在 md5sum 和文件名之间添加一个空格。所以我目前的输出是:

1be9df543bb5fa37c4b53f0401072f98 file.xml

我需要它是:

1be9df543bb5fa37c4b53f0401072f98  file.xml

我对正则表达式/sed 感到一团糟,但这就是我所拥有的,我有点难过:

sed -E 's/([-A-Za-z_0-9]+\.[-A-Za-z_0-9]+).*$/\1  \2/'

输出是:

sed: -e expression #1, char 45: invalid reference \2 on `s' command's RHS

感谢任何帮助。

【问题讨论】:

    标签: regex linux sed md5sum


    【解决方案1】:

    你可以使用BASH string substitution:

    s='1be9df543bb5fa37c4b53f0401072f98 file.xml'
    echo "${s/ /  }"
    1be9df543bb5fa37c4b53f0401072f98  file.xml
    

    或 sed:

    sed 's/ /  /' <<< "$s"
    1be9df543bb5fa37c4b53f0401072f98  file.xml
    

    【讨论】:

    • 哇,这比我想象的要容易得多。感谢您的回答!
    【解决方案2】:

    您正在尝试引用两个匹配组,但您只创建了一个(模式中每个带括号的元素都是一个组)。

    我喜欢 anubhava 的简单建议,但如果您不想想将 每个 空格变成两个空格,请将原始正则表达式更改如下:

    sed -E 's/([-A-Za-z_0-9]+\.[-A-Za-z_0-9]+)/ \1/'

    请注意,这实际上是为了让您不要插入空格,除非下一个单词中有句点。

    【讨论】:

      【解决方案3】:

      一些awk的解决方案:

      echo "1be9df543bb5fa37c4b53f0401072f98 file.xml" | awk '{print $1"  "$2}'
      1be9df543bb5fa37c4b53f0401072f98  file.xml
      

      echo "1be9df543bb5fa37c4b53f0401072f98 file.xml" | awk '{print $1,$2}' OFS="  "
      1be9df543bb5fa37c4b53f0401072f98  file.xml
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 1970-01-01
        • 2017-06-02
        • 2014-11-05
        相关资源
        最近更新 更多