我需要删除每行的最后一个逗号。
我只有一个 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
。