我有以下输入:
a a f aa
aa aa a h o
f j
上面的输入有单个空格和多个空格。我只需要删除单个,而不是其他,即输出应该是
aaf aa
aa aaaho
f j
答案 0 :(得分:3)
Perl救援!
perl -pe 's/(?<! ) (?! )//g' < input
(?<! )
是一个负面的后卫断言。如果前面的字符串不匹配,它匹配,即在这种情况下,它不是空格。(?! )
是一个负面的预测断言。与上述类似,但向右看。答案 1 :(得分:0)
$ 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
这将删除由单词边界包围的单个空格。