줄의 후행 쉼표 삭제


10

bash에서 후행 쉼표 세트를 삭제하는 방법

a,b,c,d,,,,
1,2,3,,,,

원하는 출력 :

a,b,c,d
1,2,3

이것을 시도했다 :

 grep "5628" test.csv | sed 's/,*$//g'

그러나 작동하지 않습니다. 파일은 원래 Windows 시스템에서 온 것입니다.


2
작동하지 않습니까? 어떤 전체 명령을 실행 했습니까?
cuonglm

양. 그렇지 않았다.
user2980702

당신이 당신의 정확한 명령을 제공 할 수 있습니다, 제발합니다 ( sed당신은 파일 이름없이 표시 한이 필터 역할을하며 파일을 처리하지 않는 장소를 )
roaima

grep "5628"test.csv | SED의 / * $ // g '
user2980702

2
* nix에서 파일을 사용해야하고 파일을 Windows로 다시 복사 할 필요가없는 경우 장기적으로 줄 끝을 CR / LF에서 NL로 dos2unix또는 그와 유사한 것으로 변환하는 것이 더 쉬울 수 있습니다. .
G-Man, 'Reinstate

답변:


13

제공 한 명령을 다시 수행하십시오.

grep "5628" test.csv | sed 's/,*$//g'

모든 후행 쉼표가 제거 된 '5628'과 일치하는 행을 출력합니다. 파일을 업데이트하지 않습니다 test.csv.

그러나 파일이 Windows 시스템에서 제공되었음을 나타내므로 줄 끝은 NL 대신 CR / NL입니다. 결과적으로 줄 끝에 숨겨진 CR이 있으며 대신 명령 줄이 필요합니다.

grep "5628" test.csv | sed 's/,*\r*$//'

실제로, 당신은 단순히 이것을 하나의 명령으로 할 수 있습니다 :

sed -n '/5628/s/,*\r*$//p' test.csv

제자리에서 업데이트를 시도하지 않습니다. 쉼표없이 출력 만 필요
user2980702

이것은 효과가있었습니다 감사합니다. 따라서 파일 끝에서 캐리지 리턴 (\ r * $) 전에 여러 개의 쉼표 (, *)를 찾고 있습니다. 내가 맞아?
user2980702

\r*(유닉스 / 리눅스 파일을 도출로가 계속 작동되도록) 제로 또는-더 CR 문자 수 있습니다. \r?단일 CR 옵션을 나타내는 데 사용하고 싶지만 sed머리 위로 ERE를 사용하라는 플래그를 기억하지 못했습니다 . 나는 그것이 -r여기서 테스트되지 않았다고 생각합니다 . 은 ,*당신과 일치 제로 또는-더 쉼표입니다.
roaima

g이 경우 필요하지 않습니다, TER은 1 엔드에 의해 지정됩니다$
NeronLeVelu

2
sed -n '/5628/ s/,*\r*$//p' test.csv

(후행 혼수 만 제거하도록 요청하는 OP가 아님) 필터와 변환을 직접 수행하는 배관 프로세스를 피하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.