sed 내부 sed 문제

sed 내부 sed 문제

sed 명령에서 문자열을 구문 분석하려고 하는데 오류가 발생합니다.

sed -e "/pd begin $(echo 3:1I:1:1|sed 0,/:/{s/:/' '/})",/pd end $(echo 3:1I:1:1|sed 0,/:/{s/:/' '/})/p /tmp/hp-raid-data-harvester.out

문자열 "3:1I:1:1"의 첫 번째 ":"를 바꿔야 합니다. 연속으로 있어야 하며 이전에는 변경할 수 없습니다. 문자열은 데이터베이스의 문자열 $1에서 가져옵니다.

hp-raid-data 파일은 다음 줄에 있습니다.

### pd begin 3 2I:1:1 ###

Smart Array P410 in Slot 0

   array B

      physicaldrive 2I:1:1
         Port: 2I
         Box: 1
         Bay: 4
         Status: OK
         Drive Type: Data Drive
         Interface Type: SATA
         Size: 3 TB
         Rotational Speed: 7200
         Firmware Revision: CC4H
         Serial Number:             Z1F21GLG
         Model: ATA     ST3000DM001-9YN1
         SATA NCQ Capable: True
         SATA NCQ Enabled: True
         Current Temperature (C): 33
         Maximum Temperature (C): 42
         PHY Count: 1
         PHY Transfer Rate: 3.0Gbps


### pd end 3 2I:1:1 ###

답변1

/쉼표 앞에 정규식을 끝내려면 구분 기호 가 필요합니다 . 그리고 sed두 정규식 모두 공백이 있으므로 전체 표현식 매개변수 주위에 따옴표가 필요합니다 .

sed -e "/pd begin $(echo 3:1I:1:1|sed 0,/:/{s/:/' '/})/,/pd end $(echo 3:1I:1:1|sed 0,/:/{s/:/' '/})/p" /tmp/hp-raid-data-harvester.out
                                                      ^                                               ^

관련 정보