Регулярные выражения соответствуют определенному местоположению в файле - PullRequest
1 голос
/ 21 декабря 2009

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

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 21 декабря 2009

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

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

2 голосов
/ 21 декабря 2009

Попробуйте, если ваш 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:'
2 голосов
/ 21 декабря 2009

Что-то вроде:

app/(.*)/oracle

Сделал бы трюк.

0 голосов
/ 21 декабря 2009
$ echo "inventory_loc=/u01/app/ORAENV/oracle/oraInventory"| nawk -F"/" '{for(i=1;i<=NF;i++)if($i=="app") {print $(i+1);exit} } '
ORAENV
...