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)