【问题标题】:How to ignore a repeated charcater in a line from a file using bash?如何使用bash忽略文件中一行中的重复字符?
【发布时间】:2021-01-27 21:02:46
【问题描述】:

我有一个包含 n 行的文件,如下所示:

a,b,c,,,,d
a,b,,,,c,d
a,,,,b,c,d

如果该行中有重复的逗号,我想要做的是从每一行中删除重复的逗号。因此,我文件中的行应如下所示:

a,b,c,d
a,b,c,d
a,b,c,d

我尝试使用 grep 或 awk,但我认为我并没有真正理解这些命令。我是 bash 的新手,我有点卡住了,所以非常感谢您的帮助!

【问题讨论】:

    标签: bash command-line


    【解决方案1】:

    sed 可能是这个工具。比如:

    sed 's/,,*/,/g'
    

    您可以通过多种方式将其与管道一起使用。

    g 选项是全局的(不是 m=multiple ),表示该短语可以在一行中出现多次 - 否则只修改每行中的第一个。

    很快就会有人过来给我们推荐一个副本。没关系。

    【讨论】:

      【解决方案2】:

      这会更短

      $ tr -s , <file
      
      a,b,c,d
      a,b,c,d
      a,b,c,d
      

      【讨论】:

        【解决方案3】:

        使用这个 Perl 单行符将 1 次或多次出现的逗号替换为恰好 1 次,每行有多个匹配项:

        perl -pe 's/,+/,/g' in_file > out_file
        

        Perl 单行代码使用这些命令行标志:
        -e:告诉 Perl 查找内联代码,而不是在文件中。
        -p:循环输入一行一次,默认分配给$_。在每次循环迭代后添加print $_

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-13
          • 1970-01-01
          • 1970-01-01
          • 2013-11-23
          • 1970-01-01
          • 1970-01-01
          • 2018-08-19
          • 2023-03-22
          相关资源
          最近更新 更多