将 sed 与反向引用一起使用

Fra*_*nks 8 sed regular-expression

我正在尝试删除 2 个字符串之间的空格,它们是这样的:

312.2 MB
123.34 KB
487.1 GB
Run Code Online (Sandbox Code Playgroud)

我想将它们更改为:

312.2MB
123.34KB
487.1GB
Run Code Online (Sandbox Code Playgroud)

我一直在尝试,我可以得到:

echo "312.2 MB" | sed s/[0-9][[:space:]][GMK]//g
312.B
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用以下方法进行反向引用时sed

echo "312.2 MB" | sed s/\([0-9]\)[[:space:]]\([GMK]\)/\1/g
312.2 MB
Run Code Online (Sandbox Code Playgroud)

我的猜测是只有一个匹配,然后反向引用是完整匹配,但是:

echo "312.2 MB" | sed s/\([0-9]\)[[:space:]]\([GMK]\)/TRY/g
312.2 MB
Run Code Online (Sandbox Code Playgroud)

因此,当我使用()捕获字符时,它不再起作用

可能正则表达式并不完全正确,但我不知道为什么。

cuo*_*glm 11

问题是引用。

因为你没有引用你的sed命令,括号\(...\)在传递给sed.

因此sed将它们视为文字括号而不是转义括号,不影响反向引用。

你需要:

echo "312.2 MB" | sed 's/\([0-9]\)[[:space:]]\([GMK]\)/\1\2/g'
Run Code Online (Sandbox Code Playgroud)

使反向引用受到影响,并得到你想要的。

或者更简单:

echo "312.2 MB" | sed 's/ //'
Run Code Online (Sandbox Code Playgroud)