sed 명령을 사용하여 앞뒤에 쉼표가 없는 큰따옴표를 모두 바꿉니다.

sed 명령을 사용하여 앞뒤에 쉼표가 없는 큰따옴표를 모두 바꿉니다.

"파일의 모든 항목을 다음이나 쉼표( )로 시작하거나 줄의 시작 부분에 있지 않는 한 다음으로 바꾸고 싶습니다.^"",

즉-

"InvoiceA","Doe,John",12/01/2016,200,"Comment on Invoice: "Customer X purchased item Z from store C named "Abc" on "03/04/2016""

-로 변환해야 합니다.

"InvoiceA","Doe,John",12/01/2016,200,"Comment on Invoice: ^"Customer X purchased item Z from store C named ^"ABC^" on ^"03/04/2016^""

답변1

나는 당신이 (귀하의 예에서와 같이) 줄 끝의 따옴표 문자를 변경하지 않고 그대로 두기를 원한다고 가정합니다. 당신은 이것을 할 수 있습니다

sed 's/\([^,]\)"\([^,]\)/\1^"\2/g'

그러면 다음과 같이 세 개의 연속 문자로 구성된 문자열이 검색됩니다.

  1. 쉼표( ) 이외의 문자 ,,
  2. 큰따옴표( ") 및
  3. 쉼표 이외의 문자,

그리고 그것들을 다음으로 대체하십시오.

  1. 첫 번째 역할,
  2. ^", 그리고
  3. 세 번째 역할.

예를 들어 여러 개의 연속된 따옴표 문자에는 작동하지 않습니다.

…200,"Purchase at store named "" on Tuesday"

추신: 귀하의 예에 불균형한 인용문이 있다는 것을 알고 계십니까?

"Comment on Invoice: "Customer X purchased item Z from store C named "Abc" on "03/04/2016""
                     ↑                                               ↑   ↑    ↑          ↑

관련 정보