sed 사용 - 잘린 값을 행의 별도 값으로 바꾸는 방법은 무엇입니까?

sed 사용 - 잘린 값을 행의 별도 값으로 바꾸는 방법은 무엇입니까?

로그 데이터 예:

SVCELPTIME=19,FAILPT=9580-8582,MICROSERVICE=YES
SVCELPTIME=411,FAILPT=9210-80129210-8686,MICROSERVICE=YES
REFNO=JAJRJZ,TXNREFNO=63165718100281723,SVCELPTIME=21,FAILPT=9210-80129210-86519210-8651,CD=PT

A는 FAILPT"4비트 - 4비트"로 정의됩니다. 예를 들어 9580-8582. 내가 겪고 있는 문제는 일부 줄에서 여러 개의 FAILPT''가 첫 번째 줄까지 잘린다는 것입니다. 예를 들어 9580-85819580-85829580-8583, 각각을 별도의 키-값 쌍으로 처리해야 합니다.

sed를 사용하세요:

echo FAILPT=9210-80129210-86519230-8012 | sed 's/FAILPT=//; s/.\{4\}\|.\{4\}-.\{4\}/FAILPT=&,/g; s/,$//'

이것은 다음을 생성합니다: FAILPT=9210-8012,FAILPT=9210-8651,FAILPT=9230-8012 <- 정확히 내가 필요한 것.

하지만 로그 파일을 적용하려고 하면 모든 것이 중단됩니다.

예를 들어(예제 줄 사용):

FAILPT=SVCE,FAILPT=LPTI,FAILPT=ME=1,FAILPT=9,95,FAILPT=80-8,FAILPT=582,,FAILPT=MICR,FAILPT=OSER,FAILPT=VICE,FAILPT==YES
FAILPT=SVCE,FAILPT=LPTI,FAILPT=ME=4,FAILPT=11,9,FAILPT=210-,FAILPT=8012,FAILPT=9210-8686,FAILPT=,MIC,FAILPT=ROSE,FAILPT=RVIC,FAILPT=E=YE,S
FAILPT=REFN,FAILPT=O=JA,FAILPT=JRJZ,FAILPT=,TXN,FAILPT=REFN,FAILPT=O=63,FAILPT=1657,FAILPT=1810,FAILPT=0281,FAILPT=723,,FAILPT=SVCE,FAILPT=LPTI,FAILPT=ME=2,FAILPT=1,92,FAILPT=10-8,FAILPT=0129,FAILPT=210-,FAILPT=8651,FAILPT=9210-8651,FAILPT=,CD=,PT

FAILPT=행의 나머지 부분을 건드리지 않고 값을 바꾸거나 추가하려면 어떻게 해야 합니까 ?

답변1

나는 내 자신의 질문에 의견으로 대답했습니다. 4~4개의 패턴이나 그 안에 있는 여러 패턴만 찾으면 됩니다. 일을 엉망으로 만드는 것은 OR 절입니다.

sed '/FAILPT=*,/p; s/FAILPT=//; s/.\{4\}-.\{4\}/FAILPT=&,/g; s/,,/,/'

관련 정보