从线中删除单个空格,但留下单独
问题描述:
多个空格我有以下输入:从线中删除单个空格,但留下单独
a a f aa
aa aa a h o
f j
上述输入具有单个空格以及多个空格。我需要删除只有单一的,而不是其他人,即输出应该是
aaf aa
aa aaaho
f j
答
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
这会消除字边界包围的一个空白。
请在这里发布之前努力解决您自己的问题。 –