2010-06-30 2 views
1

Я пытаюсь написать сценарий оболочки, который ищет в файле, указанном в качестве аргумента $ 1 для регулярного выражения, и записывает найденный подшаблон в переменную, которую я могу использовать.extract regexp result from string и записать его в переменную

скажем мой сценарий называется «dosth.sh» и у меня есть файл «plot.gp» с линией

set output 'test.tex' 

Если я теперь выполнить «dosth.sh plot.gp» скрипт должен extract 'test.tex' из plot.gp и записать его в переменную.

Как это возможно с помощью grep или других?

Спасибо и уважением, Ян Оливер

+0

Какие оболочки вы используете? – Johnsyweb

+0

unix shell на mac os x. Но я сам это понял. – janoliver

ответ

0

Вы могли бы попробовать что-то вдоль линий

value=`grep '^set output' $x | cut -d' ' -f 3` 

(Обратите внимание, что вы будете удерживать котировки в $value

+0

Спасибо! Это почти то, что я хочу, кроме тех, кто в ценности. – janoliver

0

dosth.sh:

#!/bin/bash 
VALUE=`cat $1 | grep <your regexp here>` 
echo $VALUE 

это может использоваться как:

$ ./dosth.sh a.txt 

затем найденные строки хранятся в переменной VALUE

Вы также можете дать регулярное выражение над некоторыми аргументами (заданные для файла с помощью сценария):

dosth.sh:

#!/bin/bash 
echo -e "Which file do you want to grep?" 
read FILENAME 
args=("[email protected]") 
VALUE=`cat $FILENAME | grep $args` 
echo $VALUE 

, который может быть использован как:

$ ./dosth.sh here comes my * pattern 

Может быть, эта ссылка полезно для вас: Link

+0

Благодарим вас за ответ, но проблема в том, что я хочу, чтобы подстановка шаблона сохранялась в моей переменной, а не в шаблоне отверстия. – janoliver

2
value=`cat $1 | grep -e 'set output' | cut -d'"' -f 2` 

с использованием "вместо" и линия выше делает работу.

+0

value = cat $ 1 | grep -e 'set output' | cut -d \ "-f 2 –

+0

-1 У этого есть ряд проблем, помимо проблемы форматирования. – tripleee

0
variable=$(sed -n '/^set output/ s/[^\x27]*\x27\([^\x27]*\)\x27/\1/p' "$1") 
0

value=$(awk -F"'" '$1 == "set output " {print $2}' somefile)