다음 서식 지정 줄이 포함된 대규모 파일 세트가 있습니다. 여는 중괄호와 닫는 중괄호가 포함된 |
공백으로만 문자를 바꿔야 합니다 . {"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/;
|
내부 중괄호를 교체합니다 . 한번에 한.