2009-11-22 5 views
2

CSV 파일의 줄에 두 번째 쉼표를 포함한 &까지 모든 문자를 sed를 사용하여 삭제하는 방법을 설명 할 수 있습니까?줄의 두 번째 쉼표를 포함한 모든 문자를 삭제하는 sed 스크립트

전형적인 라인의 시작은 ABC/DEF

1234567890, 같을 수도 있고, 첫 번째 열의 자릿수가 임의의 순서로, 즉있을 수 9 개 항 또는 제 11 별도의 숫자가 변동하고, 두 번째 열의 글자도 무작위로 표시 될 수 있습니다. 이 무작위성 및 가변 길이는 명시적인 패턴 검색을 사용하는 것을 불가능하게 만듭니다.

답변

7

당신은 내가 그것을 시도, 구문에이

sed -e 's/^\([^,]*,\)\{2\}//' 

100 %처럼 나오지도 반드시 함께 할 수 있고, 그래도 작동하는 것 같다. 쉼표 다음에 쉼표가 오는 0 이상을 지우고 모든 것이 연속해서 두 번 일치합니다.

그러나 더 쉽게 구분 기호 및 인쇄 필드 3 최대로 쉼표를 사용합니다이

cut -d, -f3- 

처럼 컷을 사용하는 것입니다.

편집 :
그냥 기록을 위해, 모두 나오지과 컷 너무

cut -d, -f3- myfile.txt 

같은 말을 추가, 매개 변수로 파일로 작업하거나 파이프의 출력을 할 수 귀하의 프로그램을 통해 그들을

./myprogram | cut -d, -f3- 
+0

당신이'GNU를 사용하는 경우는 -r 나오지도'할 수 sed'의/^ ([^,] *) {2} // ''눈에 좀 더 쉽게이다. –

+0

@Dennis Williamson : 예, posix 정규식은 고정 된 문자열을 찾을 때를 제외하고는 인간의 눈을위한 것이 아닙니다. :) – falstro

2

sed는 (할 수 있지만) 도구의 "오른쪽"선택하지 않습니다. 구조화 된 데이터가 있기 때문에 복잡한 정규식을 작성하는 대신 필드/구분 기호 메소드를 사용할 수 있습니다.

모든 응답에 대한

$ gawk -F"," '{$1=$2=""}1' file 
$ gawk -F"," '{for(i=3;i<NF;i++) printf "%s,",$i; print $NF}' file 
0

감사를

$ cut -f3- -d"," file 

잘라 사용하거나 둔한 수 있습니다 - 도움이 내가 원하는 무엇을하는 아래의 간단한 실행 스크립트를 작성한 제공과 함께.

#!/bin/bash 
cut -d, -f3- ~/Documents/forex_convert/input.csv | 
sed -e '1d' \ 
-e 's/-/,/g' \ 
-e 's/ /,/g' \ 
-e 's/:/,/g' \ 
-e 's/,D//g' > ~/Documents/forex_convert/converted_input 

exit 
관련 문제