각 줄의 마지막 쉼표를 제거해야 합니다.
다음과 같은 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
또한 "," 대신 "."이 사용되는 이유를 명확히 합니다. 이는 정규식이며 거의 모든 문자와 일치하므로 ";"이 있으면 해당 문자도 대체됩니다. 더 정확할 수도 있고 .$
로 변경할 수도 있습니다 ,$
.
편집하다:
실제로 끝에 공백이 있다고 언급하신 것을 확인했습니다. 따라서 이 코드는 공백이 있어도 작동합니다. 솔라리스에서 검증되었습니다.
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
vim
나는 use 또는 vi
와 동일한 구문을 사용합니다 sed
. ":"(콜론)을 사용하여 명령 모드로 들어간 다음 를 실행합니다 %s/,$//g
.
답변4
이 시도
perl -pi -e 's/^(.*),(.+)$/$1/' conv2015_10_LogicalComponent_CosProfile.csv
(.*)
마지막 쉼표와 그 뒤의 모든 항목(공백)이 일치할 수 있을 때까지 모든 항목을 일치시키고 (.+)
, 마지막으로 전체 줄을 에 저장된 첫 번째 일치 항목으로 바꿉니다 $1
.