2

我需要在 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

任何帮助表示赞赏。

4

3 回答 3

3

您可以使用BASH string substitution

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

或 sed:

sed 's/ /  /' <<< "$s"
1be9df543bb5fa37c4b53f0401072f98  file.xml
于 2014-02-11T17:16:01.970 回答
2

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

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

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

请注意,这实际上给您带来的好处是您不要插入空格,除非下一个单词中有句点。

于 2014-02-11T17:18:47.380 回答
1

一些awk解决方案:

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

echo "1be9df543bb5fa37c4b53f0401072f98 file.xml" | awk '{print $1,$2}' OFS="  "
1be9df543bb5fa37c4b53f0401072f98  file.xml
于 2014-02-12T06:12:22.370 回答