我想删除由空格分隔的两个不同字符之间的空格。
例如
在字符串“hello world doddy”中,我想要hello&和世界被删除(但保留世界和doddy之间的空间,因为d d模式需要保留)。
我试过了:
$ echo "hello world doddy" | sed 's/\(.\) \([^\1]\)/\1\2/g'
但结束了
helloworlddoddy
答案 0 :(得分:2)
您不能在字符类中使用backref。
对于那些应该保留空间的情况,我会通过使用哨兵来解决这个问题,如下所示:
echo "hello world doddy" |
sed 's/\([^ ]\) \1/\1<<>>\1/g;s/\([^ ]\) \([^ ]\)/\1\2/g;s/<<>>/ /g'
修改:将.
更改为[^ ]
以避免修改双倍空格,只是为了更精确。谢谢你的建议。
答案 1 :(得分:2)
首先将两个相同字符之间的任何空格加倍,以准备字符串。介入空间从两个相同的字符之间转移到一个字符和一个空格之间,因此可以同样的方式检查所有空格。
echo "hello world doddy" | sed -e 's/\(.\) \1/\1 \1/g' -e 's/\(.\) \(.\)/\1\2/g'