2009-12-20 12 views
1

Le fichier je travaille avec (oraInst.loc) ressemble à ceci:Expressions régulières match emplacement spécifique fichier

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

-je utiliser une expression régulière pour saisir la valeur entre les app/et/oracle. Dans ce cas, ce sera ORAENV mais il pourrait s'agir de toute chaîne alphanumérique de n'importe quel cas et de toute longueur mais sans espace. D'après ce que j'ai lu jusqu'ici en utilisant le groupement semble être la manière de faire ceci mais je ne peux pas obtenir ma tête autour de lui. J'utilise egrep sur Solaris 10 comme moteur regex.

Répondre

2

Essayez ceci, en supposant que votre egrep a -o:

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

Sortie:

ORAENV 

mise à jour, solution en utilisant sed:

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

Merci pour la suggestion malheureusement mon egrep fait ne supporte pas "-o" Je dois aimer les outils standard de Solaris ... le fléau de ma vie ces derniers temps – arthurd

+0

Peut-être que grep n'est pas le bon outil pour vous.S'en est-il de sed à la place? –

+0

L'exemple sed fonctionne très bien! – arthurd

3

Essayez ceci:

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

+0

bash-3.00 # egrep/app/([\ d \ w] +)//var/opt/oracle/oraInst.loc bash: syntaxe err ou un jeton presque inattendu '(' Est-ce un problème avec egrep? – arthurd

+0

Je l'ai corrigé, désolé :) –

+0

bash-3.00 # egrep \/app \/([\ d \ w] +) \/oracle \//var/opt/oracle/oraInst.loc bash: erreur de syntaxe à proximité Peut-être que je n'utilise pas correctement egrep – arthurd

2

Quelque chose comme:

app/(.*)/oracle 

ferait l'affaire.

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