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
                                                      ^                                               ^

相关内容