Bash 删除行尾重复字符的可变数量
编辑:在一个新文件上测试下面答案中的命令后,它工作了。现在我发现我的数据文件是CRLFBash 删除行尾重复字符的可变数量,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;;;;;;;;;;;;;;;;;;;;;;;; 删除行尾重复逗号的最佳方法是什么 观
考虑这种数据文件:
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无中生有是不好的,因为:(1)结尾的数字可能是奇数;(2) 可能有一些代码>在中间,必须留在那里。
所需输出:
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/\(.\)\(…\)\(.*)/'