如何删除每行中连续重复的字符?

问题描述 投票:0回答:4

我在一个文件里有以下几行

Acanthocephala;Palaeacanthocephala;Polymorphida;Polymorphidae;;Profilicollis;Profilicollis_altmani;
Acanthocephala;Eoacanthocephala;Neoechinorhynchida;Neoechinorhynchidae;;;;
Acanthocephala;;;;;;;
Acanthocephala;Palaeacanthocephala;Polymorphida;Polymorphidae;;Polymorphus;;

我想把所有行中重复的分号去掉,就像下面这样(注意,上面一些行的中间也有重复的分号)。

Acanthocephala;Palaeacanthocephala;Polymorphida;Polymorphidae;Profilicollis;Profilicollis_altmani;
Acanthocephala;Eoacanthocephala;Neoechinorhynchida;Neoechinorhynchidae;
Acanthocephala;
Acanthocephala;Palaeacanthocephala;Polymorphida;Polymorphidae;Polymorphus;

如果有人能好心地分享一个bash单行本来完成这个任务,我将感激不尽。

bash text-processing
4个回答
2
投票

您可以使用 tr 与 "挤"。

tr -s ';' < infile

2
投票
perl -p -e 's/;+/;/g' myfile   # writes output to stdout

或者

perl -p -i -e 's/;+/;/g' myfile   # does an in-place edit

0
投票

如果你想编辑文件本身。

printf "%s\n" 'g/;;/s/;\{2,\}/;/g' w | ed -s foo.txt

如果你想把文件修改后的副本转到别的地方,而不改变原来的文件。

sed 's/;\{2,\}/;/g' foo.txt | whatever

这些都是用单个分号代替2个或更多分号的运行.


0
投票

可以很容易的通过替换来解决。我通过玩FSOFS变量来增加一个awk解决方案。

awk -F';+' -v OFS=';' '$1=$1' file

或者

awk -F';+' -v OFS=';' '($1=$1)||1' file

0
投票

这是一个sed版本的 阿拉尼维的回答:

sed 's/;\+/;/g' myfile  # Write output to stdout

sed -i 's/;\+/;/g' myfile  # Edit the file in-place
© www.soinside.com 2019 - 2024. All rights reserved.