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)
这应该有效。
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)
使用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)