CSV 문자열 형식을 수정하는 방법

CSV 문자열 형식을 수정하는 방법

출력 라인이 있습니다 ipsec statusall <conn_name>. 트래픽 양에 따라 다음과 같을 수 있습니다.

sr_mesh_aws_22{10}:  AES_CBC_256/HMAC_SHA2_256_128/MODP_1024, 0 bytes_i, 0 bytes_o, rekeying in 32 minutes

때때로:

sp_mesh_6_7{8}:  AES_CBC_256/HMAC_SHA2_256_128, 336  bytes_i, 336  bytes_o (4 pkts, 15s ago), rekeying disabled

또는:

sr_mesh_aws_21{24}:  AES_CBC_256/HMAC_SHA1_96, 59189 bytes_i (469 pkts, 0s ago), 128238 bytes_o (431 pkts, 0s ago), rekeying in 32 minutes

문자열 형식:

conn_name{id}: algorithm, traffic in info, traffic out info, rekeying info

모든 것이 분석하기 쉽지만 트래픽 흐름이 시작되면 traffic in info또는 traffic out info사이의 필드 에 추가 정보가 나타납니다 (...). 그리고 같은 문자로 구분된 2개의 필드가 있습니다 ,!

존재하는 경우 모두를 내부 ,로 바꾸는 방법은 무엇입니까?;(...)

더 나은 간단한 쉘 도구: sed/awk/...

답변1

보여준 예를 바탕으로 빠른 해킹은 다음과 같습니다.

  • ,교체 하지 않음(...)
  • 하지만 다음 pkts,으로 대체pkts;

주다:

echo "sr_mesh_aws_21{24}:  AES_CBC_256/HMAC_SHA1_96, 59189 bytes_i (469 pkts, 0s ago), 128238 bytes_o (431 pkts, 0s ago), rekeying in 32 minutes" | sed 's/pkts,/pkts;/g'

참고: 이 echo ...섹션에서는 명령 출력을 시뮬레이션합니다.

답변2

말하지 않은 것처럼 중첩된 괄호가 없으면 다음을 수행합니다 sed.

sed ':repeat s/\(([^,)]*\),\([^)]*)\)/\1;\2/;t repeat' infile

관련 정보