Получение текста между кавычками в чем-то уже найденном Regex - PullRequest
0 голосов
/ 01 марта 2012

Я попал в мою систему шаблонов (Twig) для локализованных строк, таких элементов:

{{ "I'd like this quote to be localized" | trans }}
{{ "this_is_a_key" |trans}}
{{'another text'| trans}}
{{"ohter"|trans }}
{{'no_spaces'|trans}}

С помощью этой команды:

find src/ -type f -name '*.twig' -execdir egrep -o -- "\{\{[^|()}{]*\|[(trans) ^}]*\}\}" {} \;

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

Но я хотел бы пойти немного дальше и напрямую получить то, что находится между "" или "в моем выше.Примеры.Как настроить мой поиск или выполнить другой поиск после, чтобы извлечь это?

PS: Мой текущий сценарий .sh:

old_IFS=$IFS
IFS=$'\n'
transFound = 0;

allUsed=`find src/ -type f -name '*.twig' -execdir egrep -o -- "\{\{[^|(){]*\|[(trans) ^}]*\}\}" {} \;`
defaultFile="messages.yml"

for key in $allUsed
    do
        echo $key
        let "transfound++"
    done

echo "Found $transfound translations"

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Вы можете использовать регулярные выражения perl ( -P ) и only ( -o )

$ grep -oP "(['\"]).*\1" input.txt
"I'd like this quote to be localized"
"this_is_a_key"
'another text'
"ohter"
'no_spaces'

   -o, --only-matching
          Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

   -P, --perl-regexp
          Interpret PATTERN as a Perl regular expression (PCRE, see below).  This is highly experimental  and  grep  -P  may  warn  of  unimplemented
          features.
0 голосов
/ 01 марта 2012

Я наконец нашел его;) Пришлось использовать sed:

find src/ -type f -name '*.twig' -execdir egrep -o -- "\{\{ ?['\"][^|()}{]*\|[(trans) ^}]*\}\}" {} \; | sed "s/.*'\(.*\)'[^']*$/\1/" | sed 's/.*"\(.*\)"[^"]*$/\1/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...