Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 从行中删除单个空格,但保留多个空格_Shell_Awk_Sed_Cut - Fatal编程技术网

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):


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

    请在将问题发布到此处之前,努力解决您自己的问题。