csv 행에 x개 이상의 파이프가 있는 경우 두 번째 인스턴스를 삭제합니다.

csv 행에 x개 이상의 파이프가 있는 경우 두 번째 인스턴스를 삭제합니다.

제품 번호, 제목, URL 및 가격을 포함하여 4개의 데이터 열을 포함해야 하는 csv 파일이 있습니다. 각 열은 |구분 기호로 구분됩니다(이는 유지되어야 하며 여기서는 논의하지 않지만 대체 구분 기호로 전환할 수 없는 다른 이유가 있습니다). 맨 아래 항목(이 예에서 문제가 있는 항목)에서 볼 수 있듯이 헤더에는 파이프가 포함되어 있어 스키마를 손상시키고 데이터를 데이터베이스로 가져와야 하는 경우 문제를 일으킬 수 있습니다.

5456435121|The making of the blue album|https://www.example1.co.uk|55
1321354567|Wow this example has no imagination|https://www.cherrypickers.co.uk|89
5456456456|King of the Barbarians | Last Man Standing|https://www.babarians.co.uk|79

내가 알고 싶은 것은 파일을 효과적으로 구문 분석하고 3개 이상의 파이프가 있는 모든 줄(즉, 헤더에 파이프가 포함된 모든 줄)에 대해 두 번째 줄을 삭제하는 명령을 실행하는 방법입니다. 이렇게 하면 헤더에 하나 이상의 파이프가 있는 경우 효과적으로 파이프를 제거할 수 있습니다. 어떻게 구현하는지 모르겠습니다.

처리 후 파일이 다음과 같이 보이도록 하고 싶습니다.

5456435121|The making of the blue album|https://www.example1.co.uk|55
1321354567|Wow this example has no imagination|https://www.cherrypickers.co.uk|89
5456456456|King of the Barbarians Last Man Standing|https://www.babarians.co.uk|79

답변1

sed -r ':;s/(\|.*)\|(.*\|.*\|)/\1\2/;t'

앞에 하나의 파이프가 있고 뒤에 두 개의 파이프가 오는 모든 파이프를 삭제합니다.

파일을 그 자리에서 편집하려면 -i옵션을 사용하십시오.

관련 정보