SED는 각 줄에서 마지막 큰따옴표를 제거하지 않습니다.

SED는 각 줄에서 마지막 큰따옴표를 제거하지 않습니다.

내보낼 때 각 제목과 값에 큰따옴표가 있는 CSV가 있는데, 이를 사라지게 해야 하지만 실제로 값으로 존재할 수 있는 큰따옴표는 제거하지 않아야 합니다. 예를 들어:

"HEADER1","HEADER2","HEADER3","HEADER4","HEADER5"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"

"다음을 사용하여 각 줄의 첫 번째 줄을 삭제할 수 있습니다.

$ sed -i.bak 's/^"//g' $1

다음과 같이 중간에 있는 모든 것을 제거할 수 있습니다.

$ sed -i.bak 's/","/,/g' $1

마침내 나는 "각 줄의 마지막 부분을 삭제할 수 있다고 생각했습니다.

$ sed -i.bak 's/"$//g' $1

그러나 이것은 작동하지 않습니다. 한 줄로 전체 작업을 완료할 수 있나요?

고쳐 쓰다 나는 사용했다이 웹사이트숨겨진 문자 데이터를 붙여넣어 본 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

댓글 중 일부가 정확할 수도 있지만, 그렇다고 해서 여전히 변경이 필요하다는 뜻인지는 모르겠습니다. 반품이러한 인용문을 제거하기 전에 CSV에 이러한 인용문이 포함되어 있는지 확인할 수 있는 명확한 방법이 있습니까?어쩌면 첫 번째 문자를 따옴표로 한정할 수도 있을까요?

답변1

dos2unixDOS 텍스트 파일 형식을 UNIX 텍스트 파일 형식으로 변환하는 데 사용됩니다.

dos2unix $1

3가지를 모두 다음과 같이 결합할 수 있습니다 sed.

 sed -i 's/^"//g;s/","/,/g;s/"$//g' $1

SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it

사용 AWK:

awk -F ',' -v OFS=',' '{for (i=1;i<=NF;i++) sub(/^\"/,"",$i) sub (/\"$/,"",$i); print $0}' 1$

HEADER1,HEADER2,HEADER3,HEADER4,HEADER5
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
  • sub(/^\"/,"",$i)"각 필드의 시작 부분을 제거합니다 .
  • sub(/\"$/,"",$i)"각 필드의 끝을 삭제합니다 .

관련 정보