2009-12-20 61 views
1

文件我與(oraInst.loc)的工作是這樣的:正則表達式匹配特定的位置在文件

inventory_loc=/u01/app/ORAENV/oracle/oraInventory 
inst_group=dba 

我需要使用正則表達式來抓取應用程序/和/甲骨文之間的值。在這種情況下,它將是ORAENV,但它可以是任何情況和長度的任何字母數字字符串,但不包含空格。

從我迄今爲止使用分組閱讀的方式來看,似乎是這樣做的方式,但我無法讓我的腦袋圍繞它。

我在Solaris 10上使用egrep作爲正則表達式引擎。

回答

2

試試這個,假設你的egrep有-o:

$ echo '/u01/app/ORAENV/oracle/oraInventory' | egrep -o '/app/[0-9A-Za-z]+/oracle/' | cut -d'/' -f3 

輸出:

ORAENV 

更新,解決方案使用SED:

$ echo '/u01/app/ORAENV/oracle/oraInventory' | sed 's:.*/app/\(.*\)/oracle/.*:\1:' 
+0

感謝您的建議,不幸的是我的egrep會不支持「-o」,需要愛solaris標準工具...最近我生活中的禍根 – arthurd 2009-12-21 00:07:46

+0

也許grep對你來說不是合適的工具,怎麼樣sed呢? – 2009-12-21 00:09:22

+0

sed示例很好用! – arthurd 2009-12-21 00:16:29

3

試試這個:

\/app\/([\d\w]+)\/oracle\/

+0

的bash-3.00#egrep的/ app /([\ d \ w] +)/ /var/opt/oracle/oraInst.loc bash:syntax err或接近意外的標記'(' 這是egrep的問題嗎? – arthurd 2009-12-20 23:45:37

+0

我修好了,對不起:) – 2009-12-20 23:46:45

+0

bash-3.00#egrep \/app \ /([\ d \ w] +)\/oracle \//var/opt/oracle/oraInst.loc bash:意外的令牌'(' 也許我沒有正確使用egrep – arthurd 2009-12-20 23:50:10

2

喜歡的東西:

app/(.*)/oracle 

會做的伎倆。

0
$ echo "inventory_loc=/u01/app/ORAENV/oracle/oraInventory"| nawk -F"/" '{for(i=1;i<=NF;i++)if($i=="app") {print $(i+1);exit} } ' 
ORAENV