如何使用 sed 删除字符串中不同字符之间的空格?
我想删除由空格分隔的两个不同字符之间的空格。
例如,
在字符串“hello world doddy”中,我想要 hello 和 之间有空格。 world 被删除(但保留 world 和 doddy 之间的空间,因为需要保留 dd 模式)。
我尝试过:
$ echo "hello world doddy" | sed 's/\(.\) \([^\1]\)/\1\2/g'
但最终得到了
helloworlddoddy
I want to remove the space between two distinct chars separated by space.
For example
In String "hello world doddy", I want the space between hello & world be removed (but preserve the space between world and doddy, since d d pattern needs to be preserved).
I tried:
$ echo "hello world doddy" | sed 's/\(.\) \([^\1]\)/\1\2/g'
But ended up with
helloworlddoddy
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
通过首先将两个相同字符之间的任何空格加倍来准备字符串。中间的空格从两个相同字符之间转变为一个字符和一个空格之间,因此可以以相同的方式检查所有空格。
Prep the string by first doubling any space that is between two identical characters. The intervening space shifts from being between two identical characters to between one of the characters and a space, so all spaces can be checked the same way.
您不能在字符类中使用 backref。
对于应该保留空间的情况,我会通过使用哨兵来解决此问题,如下所示:
编辑:将
.
更改为[^]
以避免处理双空格,只需更准确地说。谢谢你的建议。You cannot use a backref inside a character class.
I would approach this by using a sentinel for those cases where the space should be preserved, like so:
Edit: changed
.
to[^ ]
to avoid manging double spaces, just to be more precise. Thanks for the suggestion.