Как я могу использовать символы регулярного выражения Perl в скрипте bash? - PullRequest
0 голосов
/ 14 сентября 2010

Мне бы хотелось, чтобы функция командной строки, которую я мог запустить в любом файле, изменила оператор PHP include("myinc.inc"); на include 'myfile.inc';. Я начал с добавления следующего в мой ~ / .bashrc file:

function makestandard() {
    perl -p -i -e 's/include\("([\w\.]+)"\)/include '$1'/g' $*
}

I source ~/.bashrc; и запустите команду в командной строке следующим образом:

$ makestandard myfile.php

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

Как это исправить?


Справочная информация ( не нужно читать ): мы начали использовать PHP_CodeSniffer (phpcs) , чтобы прослушивать код PHP и сообщать о любых неприятных "запахах".К сожалению, phpcs не исправляет нестандартный код, а только сообщает об этом.Поэтому я хотел бы создать скрипт, который исправляет некоторые простые и распространенные нестандартные элементы нашего PHP-кода.Я планирую заполнить свою makestandard функцию bash связкой perl pie .

Оболочка: все, что есть в Ubuntu 10.04.

Ответы [ 3 ]

5 голосов
/ 14 сентября 2010

Вы должны избегать ваших простых кавычек и удалить последнюю скобку:

perl -p -i -e "s/include\(\"([\w\.])+\"\)/include '\$1'/g" $*
4 голосов
/ 14 сентября 2010

Это не переменная bash, это одинарные кавычки в строке bash, заключенной в одинарные кавычки.

0 голосов
/ 14 сентября 2010

Исходный оператор Perl, если бы он работал, нашел бы

include("something.php") 

и записал бы

include 'something.php')

, то есть он удалил бы открывающую скобку и заменил бы двойные кавычкис одиночным .. и без изменения расширения как требуется.

Похоже, что работает так, как задумал OP:

function makestandard() {
    perl -p -i -e 's/include\("(\w+)\.inc"\)/include("$1.php")/g' $*
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...