从行中删除单个空格,但仅留下多个空格

时间:2016-01-22 11:20:20

标签: shell awk sed cut

我有以下输入:

a a f  aa
aa  aa a h o
f  j

上面的输入有单个空格和多个空格。我只需要删除单个,而不是其他,即输出应该是

aaf  aa
aa  aaaho
f  j

3 个答案:

答案 0 :(得分:3)

Perl救援!

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

答案 1 :(得分:0)

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;

答案 2 :(得分:0)

这可能适合你(GNU sed):

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

这将删除由单词边界包围的单个空格。