Strawberry Perl - Поиск и замена в Windows - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь выполнить следующую команду:

perl -pi -e 's,vaadin-element,color-picker,g' *.* demo/* test/* src/* theme/*/*
(следующий этот документ)

К сожалению, похожечто в окне распространения Pearl, которое я использую, есть некоторые проблемы с командой, так как я получаю следующую ошибку:

Can't open *.*: Invalid argument.
Can't open demo/*: Invalid argument.
Can't open test/*: Invalid argument.
Can't open src/*: Invalid argument.
Can't open theme/*/*: Invalid argument.

Есть предложения, как это исправить?Заранее спасибо!

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

Ответы [ 2 ]

5 голосов
/ 29 мая 2019

В системах Unix оболочка расширяет глобусы и передает программы имена файлов.

$ perl -e'CORE::say for @ARGV' *
file1
file2

С другой стороны, оболочка Windows передает значения как есть и оставляет их доесли нужно, запрограммируйте их как глобусы.

>perl -e"CORE::say for @ARGV" *
*

Вы можете выполнить глобирование следующим образом:

>perl -MFile::DosGlob=glob -e"BEGIN { @ARGV = map glob, @ARGV } CORE::say for @ARGV" *
file1
file2

Блок BEGIN обычно не требуется, но он будетпри использовании -n (что подразумевается под -p) убедитесь, что он используется один раз и достаточно рано.

* -MFile::DosGlob=glob делает glob семантикой, подобной Windows.Например, *.* соответствует всем файлам, даже если они не содержат ..

Интегрировано:

perl -i -MFile::DosGlob=glob -pe"BEGIN { @ARGV = map glob, @ARGV } s,vaadin-element,color-picker,g" *.* demo/* test/* src/* theme/*/*
1 голос
/ 29 мая 2019

В операционных системах на основе Unix оболочка расширяет глобусы, например *.*, и предоставляет командную строку в виде массива строк для программы.

В Windows командная строка представляет собой одну строку, и программа должна интерпретировать, что это означает, включая такие вещи, как символы кавычек и глобусы.Если программа является обычной C-программой, среда выполнения C интерпретирует командную строку, расширяет глобусы и передает массив строк в main.Это связано с тем, что стандарт C требует этого.

Однако Perl не является C. Используйте библиотеку File::Glob для расширения аргументов.

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