如何使用 bash 忽略文件中一行中的重复字符?

How to ignore a repeated charcater in a line from a file using bash?

我有一个包含 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 的新人,我有点卡住了,所以非常感谢你的帮助!!

sed 可能是用于此的工具。类似于:

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

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

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

很快就会有人过来向我们介绍副本。没关系。

使用此 Perl 单行代码将 1 次或多次出现的逗号替换为正好出现 1 次,每行多次匹配:

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

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

这会更短

$ tr -s , <file

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