【问题标题】:Remove single spaces from lines, but leave multiple spaces alone从行中删除单个空格,但保留多个空格
【发布时间】:2016-01-22 11:20:19
【问题描述】:

我有以下输入:

a a f  aa
aa  aa a h o
f  j

上面的输入有单个空格和多个空格。我只需要删除单个的,而不是其他的,即输出应该是

aaf  aa
aa  aaaho
f  j

【问题讨论】:

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

标签: shell awk sed cut


【解决方案1】:

Perl 来救援!

perl -pe 's/(?<! ) (?! )//g' < input
  • (?&lt;! ) 是一个否定的后视断言。如果前面的字符串不匹配,则匹配,即在这种情况下,它不是空格。
  • (?! ) 是一个否定的前瞻断言。与上述类似,但向右看。

【讨论】:

    【解决方案2】:

    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;)。

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

      sed 's/\b\s\b//g' file
      

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

      【讨论】:

        猜你喜欢
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-02
        • 2016-10-23
        • 1970-01-01
        • 1970-01-01
        • 2013-03-07
        相关资源
        最近更新 更多