Как я могу изменить порядок элементов в этом шаблоне, используя Perl? - PullRequest
1 голос
/ 31 августа 2009

Как преобразовать следующие совпадения в заданный результат?

Мои файлы имеют следующие совпадения

-- cut --
Lorem ipsun Hello lorem ipsun { $hello } 
@param integer $question_id                   // example of the match
Lorem ipsun Hello lorem ipsun { $hello } 
-- cut --

Я хотел бы изменить их на

@param $question_id integer

Моя попытка псевдокода

perl -i.bak -pe `s/(@param) (\\w) ($\\w)/$1 $3 $2/`

Ответы [ 3 ]

5 голосов
/ 31 августа 2009

Вы имеете в виду (в предположении bash shell):

perl -i.bak -pe 's/(\@param) (\w+) (\$\w+)/$1 $3 $2/'
2 голосов
/ 31 августа 2009

Я бы, наверное, очень универсален:

perl -i.bak -pe 's/^(\@param)(\s+)(\S+)(\s+)(\S+)/$1$2$5$4$3/'

или очень специфично:

perl -i.bak -pe 's/^(\@param)(\s+)(\$[_a-zA-Z]\w*)(\s+)(integer|long|char)(\s+)$/$1$2$5$4$3$6/'

в зависимости от данных. Следует обратить внимание на строковую интерполяцию идентификатора $ в оболочке и строковую интерполяцию @param и $identifier в Perl. Первый обрабатывается с помощью одинарных кавычек на оболочке (для предотвращения интерполяции), а второй обрабатывается путем экранирования @ и $ (или с использованием класса символов, который не требует явного соответствия $).

1 голос
/ 31 августа 2009
s/(\@param)\s+(\w+)\s+(\$\w+)/$1 $3 $2/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...