从线中删除单个空格,但留下单独

问题描述:

多个空格我有以下输入:从线中删除单个空格,但留下单独

a a f aa 
aa aa a h o 
f j 

上述输入具有单个空格以及多个空格。我需要删除只有单一的,而不是其他人,即输出应该是

aaf aa 
aa aaaho 
f j 
+0

请在这里发布之前努力解决您自己的问题。 –

Perl来拯救!

perl -pe 's/(?<!) (?!)//g' < input 
  • (?<!)是负向后看断言。如果前面的字符串不匹配,它匹配,即在这种情况下,它不是空格。
  • (?!)是一个负面的前瞻断言。类似于上面,但看起来在右边。

Lex救命!

$ cat x.l 
%% 
" "" "+ ECHO; 
" "  /* do nothing = don't echo */ 
%% 
int yywrap(void) 
{ 
    return 1; 
} 
int main(void) 
{ 
    yylex(); 
    return 0; 
} 
$ lex x.l 
$ cc lex.yy.c -o spacedel 
$ ./spacedel < in 
aaf aa 
aa aaaho 
f j 

这个lex规范说创建一个C程序,它可以回应两个或多个空间的所有序列;忽略单个空间;而不匹配字符的默认规则是回显它们,这正是我们想要的。 (如果你想明确这一点,你可以附加. ECHO;)。

这可能为你工作(GNU SED):

sed 's/\b\s\b//g' file 

这会消除字边界包围的一个空白。