поместите регулярное выражение в переменную - PullRequest
1 голос
/ 24 июня 2011
output=`grep -R -l "${images}" *`
new_output=`regex "slide[0-9]" $output`

В основном $ output - это строка типа:

slides / _rels / slide9.xml.rels

Число в $ output изменится.Я хочу взять «slide9» и поместить его в переменную.Я надеялся, что new_output сделает это, но я не нашел команду для использования регулярных выражений.Есть еще варианты?Я использую скрипт оболочки bash.

Ответы [ 3 ]

2 голосов
/ 24 июня 2011

Ну, регулярное выражение не такая программа, как grep. ;)

Но вы можете использовать

 grep -Eo "(slide[0-9]+)"

как простой подход. -o означает: показать только совпадающую часть, -E означает: расширенное регулярное выражение (допускает более сложные шаблоны).

0 голосов
/ 24 июня 2011

В этих ситуациях лучше использовать awk:

output="`grep -R -l "main" codes`"
echo $output
tout=`echo $output | awk -F. '{for(i=1;i<=NF;i++){if(index($i,"/")>0){n=split($i,ar,"/");print ar[n];}}}'`
echo $tout

Печатает имя файла без расширения.Если вы хотите получить только slide9, используйте решения, предоставленные другими.

Пример вывода:

A@A-laptop ~ $ bash try.sh
codes/quicksort_iterative.cpp codes/graham_scan.cpp codes/a.out
quicksort_iterative graham_scan a
0 голосов
/ 24 июня 2011

Чтение Я хочу захватить «slide9» и поместить его в переменную. Я предполагаю, что вы хотите, чтобы значение, соответствующее вашему регулярному выражению, было only , помещенным в $new_output? Если это так, то вы можете изменить это на:

new_output=`egrep -R -l "${images}" * | sed 's/.*\(slide[0-9]+\).*/\1/'`

Обратите внимание, что настройка output= не требуется (если вы не используете это для чего-то другого) Если вам нужно $output для использования в другом месте, вместо этого используйте:

output=`grep -R -l "${images}" *`
new_output=`echo ${ouput} | sed 's/.*\(slide[0-9]+\).*/\1/'`

Команда sed /// аналогична команде perls s // и имеет эквивалент в большинстве языков.

Здесь я сопоставляю ноль или более символов .* до и после вашего slide[0-9]+, а затем запоминаю (обратное сопоставление) результат \( ... \) в sed (скобки могут или не должны быть экранированы в зависимости от версии сед) Затем мы заменяем все совпадение (то есть всю строку) на \1, которое расширяется до первого захваченного результата, в этом случае ваше slide[0-9]+ совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...