슬래시와 쉼표 사이(포함) 사이의 모든 텍스트를 제거합니다.

슬래시와 쉼표 사이(포함) 사이의 모든 텍스트를 제거합니다.

비슷한 레이아웃의 수천 개의 문자열이 포함된 .txt 문서가 있는데 일부 행에 원하지 않는 추가 정보가 포함되어 있습니다.

예는 다음과 같습니다.

202212_08,ABC123/A1234,AB,,C123
202212_08,CDEF1233/A5678,FG,,C345

출력이 다음과 같기를 원합니다.

20221208,ABC123,C123
20221208,CDEF1233,C344

정규식을 사용해 보았지만 계속 오류가 발생하고 출력이 비어 있습니다. 당신의 도움을 주셔서 감사합니다.

답변1

그리고 sed:

$ sed -e 's:/.*,:,:' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

이렇게 하면 /줄의 첫 번째 문자부터 줄의 마지막 문자까지 ,모든 내용이 단일 문자로 대체됩니다 ,.


그러나 입력 데이터에 여러 필드가 포함된 경우 일반적으로 awk 또는 perl을 사용하는 것이 더 좋습니다. 각 필드를 개별적으로 조작 및/또는 인쇄할 수 있기 때문입니다.

예를 들어, 다음 awk 스크립트는 내장 함수를 사용하여 /.*각 입력 줄에서 두 번째 필드를 제거한 다음 첫 번째( ), 두 번째( ) 및 마지막( ) 필드를 인쇄합니다.sub()$1$2$NF

$ awk -F, -vOFS=, '{sub(/\/.*/,"",$2); print $1, $2, $NF}' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

아니면 펄을 사용하세요:

$ perl -F, -lane '$F[1] =~ s:/.*::; print join(",",@F[0,1,-1])' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

-F,옵션은 필드 구분 기호(awk와 유사)를 설정하며, 이 -a옵션을 사용하면 입력이 자동으로 이름이 지정된 배열로 분할됩니다 @F. Perl의 줄 끝 자동 처리(예: 개행 문자 또는 ) -l를 활성화하고 Perl이 그렇게 작동하도록 만드세요 . Perl에게 다음 인수가 실행될 스크립트임을 알려줍니다.\n-nsed -n-e

$F[1]Perl 배열 인덱싱은 배열 의 두 번째 요소와 마찬가지로 1이 아닌 0에서 시작하며 @F배열 슬라이스는 @F[0,1,-1]배열의 첫 번째, 두 번째 및 마지막 요소입니다.

관련 정보