如何使用 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
我有一个包含 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