如何使用linux删除csv上每行的最后一个逗号

yes*_*co1 7 shell-script text-processing

我需要删除每行的最后一个逗号。

我只有一个 csv 文件,如下所示:

98,N,N,N,N,S,
99,N,N,N,N,S,
101,Y,Y,Y,Y,S,
Run Code Online (Sandbox Code Playgroud)

我有以下脚本,但它不起作用:

for fname in conv2015_10_LogicalComponent_CosProfile.csv
do
   sed 's/.$//' $fname > tmp.tmp
   mv tmp.tmp $fname
done
Run Code Online (Sandbox Code Playgroud)

Nev*_*ven 9

这应该有效。

    for fname in conv2015_10_LogicalComponent_CosProfile.csv
       do
       cat $fname | sed 's/.$//' > tmp.tmp
       mv tmp.tmp $fname
    done
Run Code Online (Sandbox Code Playgroud)

另一种选择是,如果您使用 GNU Sed "-i" 选项:

那么你只需要这样做:

sed -i 's/.$//' filename
Run Code Online (Sandbox Code Playgroud)

另外要澄清为什么“。” 在那里使用而不是“,”。这是匹配几乎任何字符的正则表达式,所以如果有“;” 它也将取代它。更准确地说,您可以将“.$”更改为“,$”。

编辑:

我注意到您提到最后实际上有空格。所以这段代码可以工作,即使有空格也是如此。在 Solaris 上得到验证。

cat filename | sed 's/,[[:blank:]]*$//g > tmp.tmp
mv tmp.tmp desired_filename
Run Code Online (Sandbox Code Playgroud)


hee*_*ayl 5

使用bash参数扩展:

while IFS= read -r line; do echo "${line%,}"; done <file.txt
Run Code Online (Sandbox Code Playgroud)

使用sed

sed 's/,$//' file.txt
Run Code Online (Sandbox Code Playgroud)

grep与 PCRE 一起使用:

grep -Po '.*(?=,$)' file.txt 
Run Code Online (Sandbox Code Playgroud)