Bash 删除行尾重复字符的可变数量

Bash 删除行尾重复字符的可变数量,bash,awk,sed,Bash,Awk,Sed,编辑:在一个新文件上测试下面答案中的命令后,它工作了。现在我发现我的数据文件是CRLF 考虑这种数据文件: 41;34;41;34;;;;;;;;;;;;;;;;;;; 2;5;0;24;;5;2;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0;27;;28;-20;28;20;28;;;;;;;;;;;;;;;;;;;;; 92;111;32;44;60;119;124;120;;;;;;;;;;;;;;;;;;;;;;;; 删除行尾重复逗号的最佳方法是什么 观

编辑:在一个新文件上测试下面答案中的命令后,它工作了。现在我发现我的数据文件是CRLF


考虑这种数据文件:

41;34;41;34;;;;;;;;;;;;;;;;;;;
2;5;0;24;;5;2;5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0;27;;28;-20;28;20;28;;;;;;;;;;;;;;;;;;;;;
92;111;32;44;60;119;124;120;;;;;;;;;;;;;;;;;;;;;;;;
删除行尾重复逗号的最佳方法是什么

观察重复次数
不是常量

更换两个COMA
在中间,必须留在那里。

所需输出:

41;34;41;34
2;5;0;24;;5;2;5
0;27;;28;-20;28;20;28
92;111;32;44;60;119;124;120
使用sed:

sed 's/;*$//'
它删除零个或多个
结尾的字符使用sed:

sed 's/;*$//'

它删除零个或多个
末尾的字符

sed
是正确的工具,但也适用于
awk

$ awk '{gsub(/;+$/,"")}1' file

sed
是正确的工具,但也与
awk

$ awk '{gsub(/;+$/,"")}1' file

对不起,我两个都试过了
sed/*$//g'foo.csv
cat foo.csv | sed's/*$//g'
但没有成功。现在你告诉我如何继续,我发现
sed-I-e的/\r\+$/'文件名
可以转换为LF并且
sed
现在可以工作了。听起来像
sed's/*\(\r*\)$/\1/'
是您真正应该使用的,这样您就不会仅仅为了删除尾随的分号而更改行尾。@EdMorton,
\1
的含义是什么?它是一个反向引用,用于复制
\(…\)
捕获组找到的任何内容。请尝试
echo'm4k7t3'| sed's/\(.\)\(…\)\(.*)/”
对不起,我尝试了这两种
sed's/*$//g'foo.csv
cat foo.csv | sed's/*$//g'
但没有成功。现在你告诉我如何继续,我发现
sed-I-e的/\r\+$/'文件名
可以转换为LF并且
sed
现在可以工作了。听起来像
sed's/*\(\r*\)$/\1/'
是您真正应该使用的,这样您就不会仅仅为了删除尾随的分号而更改行尾。@EdMorton,
\1
的含义是什么?它是一个反向引用,用于复制
\(…\)
捕获组找到的任何内容。尝试
echo'm4k7t3'| sed's/\(.\)\(…\)\(.*)/'