![sed 单行删除单词中间空格](https://linux22.com/image/2673/sed%20%E5%8D%95%E8%A1%8C%E5%88%A0%E9%99%A4%E5%8D%95%E8%AF%8D%E4%B8%AD%E9%97%B4%E7%A9%BA%E6%A0%BC.png)
我有一个文本文件,其中包含一些全大写的正常英语单词。不幸的是,这些单词的第一个字母和后面的字母之间都有一个空格,这是不可接受的。我尝试编写一个sed
与这些事件相匹配的表达式sed
's/[A-Z] [A-Z][A-Z]*/
,并且成功了。但是,我没有成功编写替换部分。
答案1
您需要将单词的两个部分分组,并在替换中将它们用作反向引用,如下所示:
sed -e 's/\([A-Z]\) \([A-Z]\+\)/\1\2/g'
请注意,我还更改了您使用*
to+
来指示1个或以上出现前一个字符而不是0个或更多,节省一点步骤。
另外,如果“我”这个词是单独找到的,那么整个表达式可能会出现问题。你还有什么可以匹配的来知道“我”应该是它自己的词还是与下一个词相连?那么“A”和其他单字母单词呢?
我建议将这个简单的文本黑客与某种拼写检查结合起来,以便帮助检查替换所造成的错误,例如“ABIRD”或“IWENT”。在像您所描述的那样,大量的破碎文本上,再多的正则表达式摆弄都不会给您带来完美的结果,但是一旦您使用正则表达式完成了一些粗略的清理,您就可以继续使用更精细的方法,例如拼写检查器(可以也可以从命令行运行并自动运行)来清理东西。最后,请人工校对!