두 경계 사이에 나타나는 특정 문자를 제거하는 방법

두 경계 사이에 나타나는 특정 문자를 제거하는 방법

여러 줄의 텍스트가 포함된 파일이 있습니다. "따옴표 문자를 모두 제거해야 합니다 . 그러나 두 경계 사이에 있는 경우에만 제거하고 싶습니다.

예를 들어 샘플 라인은 다음과 같습니다.

"status":0,"text":"some stuff goes in here. and some more "here","user":"1234"

아래쪽 경계는 "text":"이고 위쪽 경계는 입니다.","user"

따라서 위 줄에서는 "하나만 제거됩니다("here"라는 단어 앞).

제거하는 방법에 대한 많은 예를 보았습니다.모든 것두 국경 사이에 있지만 더 표적화된 것을 찾을 수 없었습니다. 이 질문을 여러 번 받았을 거라 생각합니다(죄송합니다). 답을 찾을 수 없는 것 같으니 누구든지 올바른 방향을 알려주시면 감사하겠습니다.

답변1

우리는 함께 sed할 수 있습니다:

sed -E ':a s/("text":"[^"]*)"(.*)(","user")/\1\2\3/;ta' infile
  • 캡처된 첫 번째 그룹에는 "text":"큰따옴표를 제외한 모든 문자가 포함됩니다.[^"]*
  • 작은따옴표가 처음으로 나타나는 경우
  • 두 번째 캡처 그룹에는 위 항목 이후의 모든 항목이 포함됩니다.(.*)
  • 세 번째로 포획된 그룹은 ","user".
  • :a s/find/replace/; taa교체가 성공하면 태그로 이동합니다. 각 반복에서 발견된 작은따옴표를 제거 "하고 다른 모든 항목(캡처된 세 그룹)을 반환합니다.

관련 정보