다음 줄을 사용하여 파일을 조작하려고 합니다.
331436218071156,XXXXXXXXXXXXXXX6269,12/28/2018,0
이 sed 명령을 사용하십시오:
sed -e '/XXXXXXXXX/ s/^\([0-9]*\),XX*[0-9]*,\([^,]*\),\(.*\)$/\2,\1,\3,/' myfile.csv
다음과 같은 라인을 생성하려면:
12/28/2018,331436218071156,0,
대신 나는 다음을 얻습니다.
,2/28/2018,331436218071156,0
,
출력 패턴의 첫 번째 문자가 대체 문자열의 끝으로 대체되는 이유는 무엇입니까?
답변1
입력 CSV 파일은 DOS 텍스트 파일입니다. DOS 텍스트 파일에는 각 줄 끝에 캐리지 리턴 문자가 있습니다. Unix 시스템에서 캐리지 리턴이 출력되면 커서 위치는 줄의 시작 부분으로 이동하고 추가 출력은 이미 있는 내용 위에 인쇄됩니다.
0
귀하의 경우 세 번째 캡처링 그룹에는 샘플 데이터 뒤에 오는 캐리지 리턴이 포함되어 있습니다. \3
being 0\r
( \r
캐리지 리턴을 나타냄) 을 사용하면 0\r,
줄 끝에서 출력할 수 있습니다. 그러면 가 인쇄되고 0
커서가 줄의 시작 부분으로 이동한 다음 쉼표가 인쇄됩니다.
입력 파일을 Unix 텍스트 파일로 변환합니다. 이는 와 같은 유틸리티를 사용하여 가장 쉽게 수행할 수 있습니다 dos2unix
.