【发布时间】:2016-01-22 11:20:19
【问题描述】:
我有以下输入:
a a f aa
aa aa a h o
f j
上面的输入有单个空格和多个空格。我只需要删除单个的,而不是其他的,即输出应该是
aaf aa
aa aaaho
f j
【问题讨论】:
-
在您将问题发布到此处之前,请努力解决您自己的问题。
我有以下输入:
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
这将删除由单词边界包围的单个空格。
【讨论】: