셸: 중괄호 안의 문자만 바꾸시겠습니까?

셸: 중괄호 안의 문자만 바꾸시겠습니까?

다음 서식 지정 줄이 포함된 대규모 파일 세트가 있습니다. 여는 중괄호와 닫는 중괄호가 포함된 |공백으로만 문자를 바꿔야 합니다 . {"USER":"AD","DESCRIPTION":"\"<some non english characters> |\n<some non english characters>","LINK":"sample"}따라서 다음 텍스트의 경우

|||||samA|sam2||||{"USER":"AD","DESCRIPTION":"\"<some non english characters>  |\n<some non english characters>","LINK":"sample"}||||data|string|

출력은 다음과 같습니다

|||||samA|sam2||||{"USER":"AD","DESCRIPTION":"\"<some non english characters>  \n<some non english characters>","LINK":"sample"}||||data|string|

나는 이 작업을 수행하기 위해 몇 시간 동안 다양한 sed 형식을 시도했지만 여전히 성공하지 못했습니다. 내가 할 수 있는 방법이 있나요?

답변1

전체적으로 :

sed  '/{[^}]*|/{:a;s/\({[^}]*\)|\([^}]*}\)/\1 \2/;ta}'

간단한 설명:

/{[^}]*|/--변경 사항을 적용할 패턴이 있는 줄만 필터링합니다. (실제로 이 부분은 제거할 수 있지만 대용량 파일 처리 속도가 빨라질 수 있습니다.)

:a;...;ta-- 대체 명령문이 아무것도 변경하지 않을 때까지 행을 반복하는 루프입니다. |내부 중괄호가 여러 개인 경우 다음이 필요합니다.

s/\({[^}]*\)|\([^}]*}\)/\1 \2/;|내부 중괄호를 교체합니다 . 한번에 한.

관련 정보