我有一个文件,其内容是
ae-scc-san-vserver01 /vol/ae_drac02_1_oradminvg_vol/ae_drac02_1_oradminvg_lun hdisk0 fcs0 FCP 150g C
ae-scc-san-vserver01 /vol/ae_drac02_1_rootvg_vol/ae_drac02_1_rootvg_lun hdisk1 fcs0 FCP 100g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskcrs03SVC_vol/ae_drac02_1_2_hdiskcrs03SVC_lun hdisk11 fcs0 FCP 16.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata01SVC_vol/ae_drac02_1_2_hdiskdata01SVC_lun hdisk12 fcs0 FCP 240.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata02SVC_vol/ae_drac02_1_2_hdiskdata02SVC_lun hdisk13 fcs0 FCP 240.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata03SVC_vol/ae_drac02_1_2_hdiskdata03SVC_lun hdisk14 fcs0 FCP 240.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata04SVC_vol/ae_drac02_1_2_hdiskdata04SVC_lun hdisk15 fcs0 FCP 240.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata05SVC_vol/ae_drac02_1_2_hdiskdata05SVC_lun hdisk17 fcs0 FCP 240.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata06SVC_vol/ae_drac02_1_2_hdiskdata06SVC_lun hdisk18 fcs0 FCP 240.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata12SVC_vol/ae_drac02_1_2_hdiskdata12SVC_lun hdisk19 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata13SVC_vol/ae_drac02_1_2_hdiskdata13SVC_lun hdisk20 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata14SVC_vol/ae_drac02_1_2_hdiskdata14SVC_lun hdisk21 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata15SVC_vol/ae_drac02_1_2_hdiskdata15SVC_lun hdisk22 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata16SVC_vol/ae_drac02_1_2_hdiskdata16SVC_lun hdisk23 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata17SVC_vol/ae_drac02_1_2_hdiskdata17SVC_lun hdisk24 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata18SVC_vol/ae_drac02_1_2_hdiskdata18SVC_lun hdisk25 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata19SVC_vol/ae_drac02_1_2_hdiskdata19SVC_lun hdisk26 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata20SVC_vol/ae_drac02_1_2_hdiskdata20SVC_lun hdisk27 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata21SVC_vol/ae_drac02_1_2_hdiskdata21SVC_lun hdisk28 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata22SVC_vol/ae_drac02_1_2_hdiskdata22SVC_lun hdisk29 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_swapvg_vol/ae_drac02_1_swapvg_lun hdisk3 fcs0 FCP 32.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskdata23SVC_vol/ae_drac02_1_2_hdiskdata23SVC_lun hdisk30 fcs0 FCP 250g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskfra01SVC_vol/ae_drac02_1_2_hdiskfra01SVC_lun hdisk31 fcs0 FCP 240.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskfra02SVC_vol/ae_drac02_1_2_hdiskfra02SVC_lun hdisk32 fcs0 FCP 240.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_u01vg_vol/ae_drac02_1_u01vg_lun hdisk4 fcs0 FCP 170.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_exportsvg_vol/ae_drac02_1_exportsvg_lun hdisk5 fcs0 FCP 100g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskcrs01SVC_vol/ae_drac02_1_2_hdiskcrs01SVC_lun hdisk6 fcs0 FCP 16.0g C
ae-scc-san-vserver01 /vol/ae_drac02_1_2_hdiskcrs02SVC_vol/ae_drac02_1_2_hdiskcrs02SVC_lun hdisk7 fcs0 FCP 16.0g C
我需要捕获服务器名称。它以 开始hdisk
并以 结束SVC
。我尝试了以下方法:
sed 's/^*hdisk(.*)SVC.*/\1/' filename
我收到此错误:
sed: 1: "s/^*hdisk(.*)SVC.*/\1/": \1 not defined in the RE
有人可以帮我如何捕获它吗?
答案1
问题是hdisk...SVC
出现了两次在行中,并且.*
是贪婪的。
如果你有 GNU grep,你可以使用该-P
选项来获得非贪婪匹配:
grep -oP '(?<=hdisk).+?(?=SVC)' file | sort -u
输出
crs01
crs02
crs03
data01
data02
data03
data04
data05
data06
data12
data13
data14
data15
data16
data17
data18
data19
data20
data21
data22
data23
fra01
fra02
答案2
您需要转义括号(并且您还需要使用星号或某种其他方法来匹配 hdisk 和 SVC 之间的多个字符)。例如:
sed 's/^hdisk\([^\/]*\)SVC.*/\1/' filename
答案3
您还可以使用awk
基于 - 的方法:
使用 GNU Awk:
awk 'match($2,/^\/vol[[:print:]]*hdisk([^_]+)SVC/,v) {print(v[1])}' filename
将匹配第二列包含模式的任何行并打印和/vol<...>hdisk<...>SVC<...>
之间的字符串hdisk
首先 SVC
,因为下划线_
已被排除。
另一种方法(应该是可移植的)
awk 'split($2,v,/hdisk|SVC/)>1 {print v[2];next}' filename
将使用hdisk
和SVC
作为字段分隔符将第二列拆分为多个字段,如果找到多个字段,则打印第二个字段。