извлечь регулярное выражение результата из строки и записать его в переменную - PullRequest
1 голос
/ 30 июня 2010

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

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

set output 'test.tex'

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

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

Спасибо и всего наилучшего, Ян Оливер

Ответы [ 5 ]

2 голосов
/ 30 июня 2010
value=`cat $1 | grep -e 'set output' | cut -d'"' -f 2`

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

0 голосов
/ 01 июля 2010

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

0 голосов
/ 30 июня 2010
variable=$(sed -n '/^set output/ s/[^\x27]*\x27\([^\x27]*\)\x27/\1/p' "$1")
0 голосов
/ 30 июня 2010

dosth.sh:

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

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

$ ./dosth.sh a.txt

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

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

dosth.sh:

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

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

$ ./dosth.sh here comes my * pattern

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

0 голосов
/ 30 июня 2010

Вы можете попробовать что-то вроде

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

(Обратите внимание, что вы сохраните кавычки в $value

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