我在一个文件里有以下几行
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单行本来完成这个任务,我将感激不尽。
您可以使用 tr
与 "挤"。
tr -s ';' < infile
perl -p -e 's/;+/;/g' myfile # writes output to stdout
或者
perl -p -i -e 's/;+/;/g' myfile # does an in-place edit
如果你想编辑文件本身。
printf "%s\n" 'g/;;/s/;\{2,\}/;/g' w | ed -s foo.txt
如果你想把文件修改后的副本转到别的地方,而不改变原来的文件。
sed 's/;\{2,\}/;/g' foo.txt | whatever
这些都是用单个分号代替2个或更多分号的运行.
可以很容易的通过替换来解决。我通过玩FSOFS变量来增加一个awk解决方案。
awk -F';+' -v OFS=';' '$1=$1' file
或者
awk -F';+' -v OFS=';' '($1=$1)||1' file
这是一个sed版本的 阿拉尼维的回答:
sed 's/;\+/;/g' myfile # Write output to stdout
或
sed -i 's/;\+/;/g' myfile # Edit the file in-place