2009-12-20 2 views
1

файла, который я работаю с (oraInst.loc) выглядит следующим образом:Соответствие регулярного выражения определенное место в файле

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

мне нужно использовать регулярное выражение, чтобы получить значение между приложением/и/оракула. В этом случае это будет ORAENV, но это может быть любая буквенно-цифровая строка любого случая и длины, но без пробелов.

Из того, что я читал до сих пор, используя группировку, похоже, это способ сделать это, но я просто не могу опустить голову над ним.

Я использую egrep на Solaris 10 в качестве двигателя регулярных выражений.

ответ

2

Попробуйте это, предполагая, что ваш имеет -o задать расширенное:

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

Выход:

ORAENV 

Update, решение с использованием СЭД:

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

Спасибо за предложение, к сожалению, мой egrep делает не поддерживайте «-o». Должен любить стандартные инструменты Solaris ... проклятие моей жизни в последнее время. – arthurd

+0

Возможно, grep - это не самый подходящий инструмент для вас. Как насчет sed вместо? –

+0

Пример sed отлично работает. – arthurd

3

Попробуйте это:

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

+0

Баш-3.00 # задать расширенное/app/([\ d \ w] +)//var/opt/oracle/oraInst.loc bash: синтаксис err или рядом с неожиданным токеном '(' Это проблема с egrep? – arthurd

+0

Я исправил это, извините :) –

+0

bash-3.00 # egrep \/app \/([\ d \ w] +) \/oracle \//var/opt/oracle/oraInst.loc bash: синтаксическая ошибка рядом неожиданный токен '(' Возможно, я неправильно использую egrep – arthurd

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 
Смежные вопросы