unix sed 삭제 어댑터 이름

unix sed 삭제 어댑터 이름

sed출력을 파이프 하고 아래 어댑터 이름을 제거 sed하고 값을 쉼표로 그룹화하고 싶습니다.

ent13: 16 3979 ent12: 211 411 3978 ent11: 15 3977 ent10: 111 178 179 311 511 1719 3976

답변1

공백을 쉼표로 바꾸고, 콜론 앞의 단어를 제거하고, 선행 공백을 제거하고, 공백 앞의 쉼표를 제거합니다.

sed 's/ /,/g; s/[^,]*:,/ /g;s/^ //;s/, / /g'

산출:

16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976

답변2

sed먼저 포함된 패턴을 제거한 ent다음 간격을 느슨하게 하고 다음 ,으로 교체할 수 있습니다.

sed 's/ent[0-9][0-9]: //g; s/ /,/g'

답변3

GNU 사용 awk또는 mawk(에서 정규식 지원 RS):

$ mawk -v RS='ent[0-9][0-9]: ' -v ORS=' ' -v FS=' ' -v OFS=',' '
    $1 != "" { $1=$1; print }
    END      { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976

또는 동등하게,

$ mawk 'BEGIN    { RS="ent[0-9][0-9]: "; ORS=FS=" "; OFS="," }
        $1 != "" { $1=$1; print } 
        END      { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976

entNN:이는 단일 행을 (여기서 숫자는)로 N구분된 레코드 집합으로 처리합니다 . 각 레코드는 공백으로 구분된 필드 집합으로 읽혀집니다.

테스트 $1 != ""는 첫 번째 빈 레코드(첫 번째 레코드 구분 기호 앞에 아무것도 없음)를 건너뛰고 해당 블록은 출력용 레코드를 다시 포맷하기 위해 다음을 수행합니다 $1=$1. 이렇게 하면 awk제공된 ORS합계 값을 사용하여 OFS형식이 다시 지정 됩니다 .

답변4

"쉼표로 값을 그룹화한다"는 것은 "각 어댑터의 번호를 다른 어댑터의 번호와 쉼표로 구분한다"는 뜻인가요? 그런 다음 시도해 보세요.

sed 's/ *ent[0-9][0-9]: /, /g; s/^, //g' file
16 3979, 211 411 3978, 15 3977, 111 178 179 311 511 1719 3976

관련 정보