![如何使用linux删除csv上每行的最后一个逗号](https://linux22.com/image/70390/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8linux%E5%88%A0%E9%99%A4csv%E4%B8%8A%E6%AF%8F%E8%A1%8C%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E9%80%97%E5%8F%B7.png)
我需要删除每行的最后一个逗号。
我只有一个 csv 文件,如下所示:
98,N,N,N,N,S,
99,N,N,N,N,S,
101,Y,Y,Y,Y,S,
我有以下脚本,但它不起作用:
for fname in conv2015_10_LogicalComponent_CosProfile.csv
do
sed 's/.$//' $fname > tmp.tmp
mv tmp.tmp $fname
done
答案1
这应该有效。
for fname in conv2015_10_LogicalComponent_CosProfile.csv
do
cat $fname | sed 's/.$//' > tmp.tmp
mv tmp.tmp $fname
done
另一种选择是如果您使用 GNU Sed-i
选项:
那么你只需要这样做:
sed -i 's/.$//' filename
另外要澄清为什么“。”在那里使用而不是“,”。这是正则表达式,几乎可以匹配任何字符,所以如果有“;”它也将取代它。你说得更精确一点,你可以.$
改成,$
。
编辑:
我注意到你提到你的末尾实际上有空格。所以即使有空格,这段代码也能工作。已在 Solaris 上得到验证。
cat filename | sed 's/,[[:blank:]]*$//g' > tmp.tmp
mv tmp.tmp desired_filename
答案2
使用bash
参数扩展:
while IFS= read -r line; do echo "${line%,}"; done <file.txt
使用sed
:
sed 's/,$//' file.txt
grep
与 PCRE 一起使用:
grep -Po '.*(?=,$)' file.txt
答案3
我会使用 usevim
或vi
.语法与 相同sed
。使用“:”(冒号)进入命令模式,然后运行%s/,$//g
。
答案4
尝试这个
perl -pi -e 's/^(.*),(.+)$/$1/' conv2015_10_LogicalComponent_CosProfile.csv
(.*)
将匹配所有内容,直到最后一个逗号及其后的任何内容(空格)都可以与 匹配(.+)
,最后用存储在 中的第一个匹配项替换整行$1
。