我正在尝试解析 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
^ ^