Shell 从行中删除单个空格,但保留多个空格
我有以下意见:Shell 从行中删除单个空格,但保留多个空格,shell,awk,sed,cut,Shell,Awk,Sed,Cut,我有以下意见: a a f aa aa aa a h o f j 上面的输入既有单个空格,也有多个空格。我只需要删除单个,而不需要删除其他,即输出应为 aaf aa aa aaaho f j 救命啊 perl -pe 's/(?<! ) (?! )//g' < input $ cat x.l %% " "" "+ ECHO; " " /* do nothing = don't echo */ %% int yywrap(void) { return 1;
a a f aa
aa aa a h o
f j
上面的输入既有单个空格,也有多个空格。我只需要删除单个,而不需要删除其他,即输出应为
aaf aa
aa aaaho
f j
救命啊
perl -pe 's/(?<! ) (?! )//g' < input
$ 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
perl-pe的/(?
(?!)
是一个否定的前瞻性断言。与上面的类似,但指向右侧
雷克斯来营救
perl -pe 's/(?<! ) (?! )//g' < input
$ 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
$cat x.l
%%
“”+回声;
“”/*什么都不做=不回显*/
%%
int-yywrap(无效)
{
返回1;
}
内部主(空)
{
yylex();
返回0;
}
$lex x.l
$cc lex.yy.c-o spacedel
$./spacedel
这个lex规范要求创建一个C程序,它回显两个或更多空格的所有序列;忽略单个空格;对于不匹配字符的默认规则是回显它们,这正是我们想要的。
(如果您想明确这一点,可以附加.ECHO;
。这可能适合您(GNU-sed):
这将删除由单词边界包围的单个空白。请在将问题发布到此处之前,努力解决您自己的问题。