awk + ​​sed +匹配复杂字符串


0

我需要有用的命令来将字符串“ / pci ... / pci ... / pci .... / scsi .... / disk ...”与awk或sed匹配?(我需要将此命令放入我的ksh脚本中)

备注1 [...]可以是任何字符串,“ pci pci pci scsi disk”是默认字符串。备注2我有Solaris计算机,因此语法应适合Solaris

       prtpicl -v |grep :disk0 | awk '{print $2}'    

给输出

       /pci@0/pci@0/pci@2/scsi@0/disk@0 

1
[...]不能是任意的字符串。如果包含它可能会很糟糕/
丹尼尔·贝克

Answers:


0
prtpicl -v \
| egrep ':disk0.*/pci[^/]+/pci[^/]+/pci[^/]+/scsi[^/]+/disk' \
| awk '{print $2}'

例如

$ cat prtpicl.out
Some headings blah blah
:disk0 some uninteresting stuff
:disk0 /pci@0/pci@0/pci@2/scsi@0/disk@0
:disk1 /pci@0/pci@0/pci@2/scsi@0/disk@1
Last line

$ cat prtpicl.out \
> | egrep ':disk0.*/pci[^/]+/pci[^/]+/pci[^/]+/scsi[^/]+/disk' \
> | awk '{print $2}'
/pci@0/pci@0/pci@2/scsi@0/disk@0

prtpicl -v | grep':disk0。* / pci [^ /] * / pci [^ /] + / pci [^ /] + / scsi [^ /] + / disk'与/ pci @ 0 / pci @ 0 / pci不匹配@ 2 / scsi @ 0 / disk @ 0吗?(我在我的solaris机器上尝试过)
Eytan

回声“ / pci @ 0 / pci @ 0 / pci @ 2 / scsi @ 0 / disk @ 0” | egrep':disk0。* / pci [^ /] * / pci [^ /] + / pci [^ /] + / scsi [^ /] + / disk'-在Linux上也不匹配,但是我需要这个solaris机器
Eytan 2012年

@Eytan:我没有Sun电脑。的输出到底是什么prtpicl -v | grep disk0
RedGrittyBrick 2012年

prtpicl -v | grep disk0给您->:disk0 / pci @ 0 / pci @ 0 / pci @ 2 / scsi @ 0 / disk @ 0
Eytan 2012年

@Eytan:它对我有用。查看最新答案。也许Sun Boxen上的egrep是不同的。稍后我将检查我的旧Solaris手册。
RedGrittyBrick 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.